GNU/Linux >> Belajar Linux >  >> Linux

Parameter Khusus Bash Dijelaskan dengan 4 Contoh Skrip Shell

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

Linux
  1. Parameter Posisi Bash Dijelaskan dengan 2 Contoh Skrip Shell

  2. Parameter baris perintah dalam skrip shell

  3. Bagaimana menangani lebih dari 10 parameter di shell

  1. Bash -c Dengan Parameter Posisi?

  2. Cara menggemakan Baris Baru di Bash Shell Script

  3. Cakupan variabel untuk skrip bash shell dan fungsi dalam skrip

  1. Manakah Parameter/variabel Khusus Shell (bash)?

  2. Berbagi Variabel di Beberapa Skrip Shell?

  3. Apakah mungkin membuat skrip bash shell berinteraksi dengan program baris perintah lain?