GNU/Linux >> Znalost Linux >  >> Linux

Speciální parametry Bash vysvětlené pomocí 4 příkladů shellových skriptů

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

Linux
  1. Bash -c s pozičními parametry?

  2. Sdílení proměnných ve více skriptech Shell?

  3. Jak zopakovat nový řádek ve skriptech Bash Shell

  1. Bash poziční parametry vysvětlené pomocí 2 příkladů shell skriptů

  2. Parametry příkazového řádku ve skriptech shellu

  3. Je možné, aby skript bash shell interagoval s jiným programem příkazového řádku?

  1. Jaké jsou speciální parametry/proměnné (bash) Shell?

  2. Jak zacházet s více než 10 parametry v shellu

  3. Spusťte všechny skripty prostředí ve složce