V rámci naší probíhající série výukových programů bash jsme diskutovali o pozičních parametrech bash v našem předchozím článku. V tomto článku si proberme speciální parametry bash s několika praktickými příklady shellových skriptů.
Některé ze speciálních parametrů bash, které probereme v tomto článku, jsou:$*, $@, $#, $$, $!, $?, $-, $_
Pro přístup k celému seznamu polohových parametrů jsou k dispozici dva speciální parametry $* a $@. Mimo dvojité uvozovky jsou tyto dva ekvivalenty:Oba se rozbalí na seznam pozičních parametrů začínajících na $1 (oddělené mezerami).
V rámci dvojitých uvozovek se však liší:$* v páru dvojitých uvozovek je ekvivalentní seznamu pozičních parametrů, oddělených prvním znakem IFS „$1c$2c$3…“.
$@ v uvozovkách je ekvivalentní seznamu pozičních parametrů oddělených mezerami v uvozovkách, tj. „$1“ „$2″..“$N“.
Příklad 1:Použijte Bash $* a $@ k rozšíření pozičních parametrů
Tento příklad ukazuje hodnotu dostupnou v $* a $@.
Nejprve vytvořte soubor expan.sh, jak je znázorněno níže.
$ 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
Dále spusťte expan.sh, jak je ukázáno níže, abyste viděli, jak $* a $@ fungují.
$ ./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
- Výše uvedený skript exportoval hodnotu IFS (Internal Field Separator) se znakem „-“.
- Skriptu expan.sh jsou předány tři parametry $1=”This is”,$2=”2″ a $3=”3″.
- Při tisku každé hodnoty speciálního parametru „$*“ poskytne pouze jednu hodnotu, což je celý poziční parametr ohraničený IFS.
- Zatímco „$@“ uvádí každý parametr jako samostatné slovo.
Příklad 2:Použijte $# k počítání pozičních parametrů
$# je speciální parametr v bash, který vám udává počet pozičních parametrů v desítkové soustavě.
Nejprve vytvořte aritmetický.sh, jak je ukázáno níže.
$ 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"
Pokud je počet pozičních parametrů menší než 2, zobrazí se informace o použití, jak je uvedeno níže,
$ ./arithemetic.sh 10 Usage: ./arithemetic.sh arg1 arg2
Příklad 3:Parametry související s procesem – $$ a $!
Speciální parametr $$ poskytne ID procesu shellu. $! vám poskytne ID procesu naposledy provedeného procesu na pozadí.
Následující skript vypíše ID procesu shellu a ID posledního spuštění procesu na pozadí.
$ cat proc.sh #!/bin/bash echo -e "Process ID=$$" sleep 1000 & echo -e "Background Process ID=$!"
Nyní spusťte výše uvedený skript a zkontrolujte ID procesu, který se tiskne.
$ ./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 $
Příklad 4:Jiné speciální parametry Bash – $?, $-, $_
- $? Udává stav ukončení naposledy provedeného příkazu.
- $- Možnosti nastavené pomocí příkazu set builtin
- $_ Dává poslední argument předchozímu příkazu. Při spuštění shellu poskytne absolutní název souboru skriptu shellu, který se provádí.
$ 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.
Ve výše uvedeném skriptu poslední příkaz echo „echo -e $_“ (podtržítko $) také vypíše hB, což je hodnota posledního argumentu předchozího příkazu. $_ tedy dá hodnotu po expanzi
$ ./others.sh ./others.sh /home/oracle Sorry, Command execution failed ! hB hB