Sebagai bagian dari seri tutorial bash kami yang sedang berlangsung, kami membahas tentang parameter posisi bash di artikel kami sebelumnya. Dalam artikel ini mari kita bahas tentang parameter khusus bash dengan beberapa contoh skrip shell praktis.
Beberapa parameter khusus bash yang akan kita bahas dalam artikel ini adalah:$*, $@, $#, $$, $!, $?, $-, $_
Untuk mengakses seluruh daftar parameter posisi, tersedia dua parameter khusus $* dan $@. Di luar tanda kutip ganda, keduanya setara:Keduanya diperluas ke daftar parameter posisi yang dimulai dengan $1 (dipisahkan dengan spasi).
Namun, dalam tanda kutip ganda, keduanya berbeda:$* dalam sepasang tanda kutip ganda setara dengan daftar parameter posisi, dipisahkan oleh karakter pertama IFS “$1c$2c$3…”.
$@ dalam sepasang tanda kutip ganda setara dengan daftar parameter posisi, dipisahkan oleh spasi tanpa tanda kutip, yaitu, “$1” “$2″..”$N”.
Contoh 1:Gunakan Bash $* dan $@ untuk Memperluas Parameter Posisi
Contoh ini menunjukkan nilai yang tersedia dalam $* dan $@.
Pertama, buat expan.sh seperti yang ditunjukkan di bawah ini.
$ cat expan.sh #!/bin/bash export IFS='-' cnt=1 # Printing the data available in $* echo "Values of \"\$*\":" for arg in "$*" do echo "Arg #$cnt= $arg" let "cnt+=1" done cnt=1 # Printing the data available in $@ echo "Values of \"\$@\":" for arg in "$@" do echo "Arg #$cnt= $arg" let "cnt+=1" done
Selanjutnya, jalankan expan.sh seperti yang ditunjukkan di bawah ini untuk melihat cara kerja $* dan $@.
$ ./expan.sh "This is" 2 3 Values of "$*": Arg #1= This is-2-3 Values of "$@": Arg #1= This is Arg #2= 2 Arg #3= 3
- Script di atas mengekspor nilai IFS (Internal Field Separator) dengan tanda ‘-‘.
- Ada tiga parameter yang diteruskan ke skrip expan.sh $1=”This is”,$2=”2″ dan $3=”3″.
- Saat mencetak setiap nilai parameter khusus “$*”, ini hanya memberikan satu nilai yang merupakan seluruh parameter posisi yang dibatasi oleh IFS.
- Sedangkan “$@” memberi Anda setiap parameter sebagai kata terpisah.
Contoh 2:Gunakan $# untuk Menghitung Parameter Posisi
$# adalah parameter khusus di bash yang memberi Anda jumlah parameter posisi dalam desimal.
Pertama, buat arithmetic.sh seperti yang ditunjukkan di bawah ini.
$ cat arithmetic.sh #!/bin/bash if [ $# -lt 2 ] then echo "Usage: $0 arg1 arg2" exit fi echo -e "\$1=$1" echo -e "\$2=$2" let add=$1+$2 let sub=$1-$2 let mul=$1*$2 let div=$1/$2 echo -e "Addition=$add\nSubtraction=$sub\nMultiplication=$mul\nDivision=$div\n"
Jika jumlah parameter posisi kurang dari 2, itu akan membuang informasi penggunaan seperti yang ditunjukkan di bawah ini,
$ ./arithemetic.sh 10 Usage: ./arithemetic.sh arg1 arg2
Contoh 3:Parameter terkait proses – $$ dan $!
Parameter khusus $$ akan memberikan ID proses dari shell. $! memberi Anda id proses dari proses latar belakang yang terakhir dijalankan.
Skrip berikut mencetak id proses shell dan terakhir mengeksekusi ID proses latar belakang.
$ cat proc.sh #!/bin/bash echo -e "Process ID=$$" sleep 1000 & echo -e "Background Process ID=$!"
Sekarang, jalankan skrip di atas, dan periksa id proses yang dicetaknya.
$ ./proc.sh Process ID=9502 Background Process ID=9503 $ ps PID TTY TIME CMD 5970 pts/1 00:00:00 bash 9503 pts/1 00:00:00 sleep 9504 pts/1 00:00:00 ps $
Contoh 4:Parameter Khusus Bash Lainnya – $?, $-, $_
- $? Memberikan status keluar dari perintah yang terakhir dieksekusi.
- $- Opsi disetel menggunakan perintah set bawaan
- $_ Memberikan argumen terakhir untuk perintah sebelumnya. Pada startup shell, ini memberikan nama file absolut dari skrip shell yang sedang dieksekusi.
$ cat others.sh #!/bin/bash echo -e "$_"; ## Absolute name of the file which is being executed /usr/local/bin/dbhome # execute the command. #check the exit status of dbhome if [ "$?" -ne "0" ]; then echo "Sorry, Command execution failed !" fi echo -e "$-"; #Set options - hB echo -e $_ # Last argument of the previous command.
Pada script di atas, pernyataan echo terakhir “echo -e $_” ($ underscore) juga mencetak hB yang merupakan nilai argumen terakhir dari perintah sebelumnya. Jadi $_ akan memberikan nilai setelah ekspansi
$ ./others.sh ./others.sh /home/oracle Sorry, Command execution failed ! hB hB