GNU/Linux >> Linux Esercitazione >  >> Linux

Parametri speciali di Bash spiegati con 4 script di shell di esempio

Come parte della nostra serie di tutorial in corso su bash, abbiamo discusso dei parametri posizionali di bash nel nostro precedente articolo. In questo articolo discutiamo dei parametri speciali di bash con alcuni esempi pratici di script di shell.

Alcuni dei parametri speciali di bash di cui parleremo in questo articolo sono:$*, $@, $#, $$, $!, $?, $-, $_

Per accedere all'intera lista dei parametri posizionali sono disponibili i due parametri speciali $* e $@. Al di fuori delle virgolette, questi due sono equivalenti:entrambi si espandono all'elenco dei parametri posizionali che iniziano con $1 (separati da spazi).

All'interno delle virgolette, tuttavia, differiscono:$* all'interno di una coppia di virgolette equivale all'elenco dei parametri posizionali, separati dal primo carattere di IFS "$1c$2c$3...".

$@ all'interno di una coppia di virgolette è equivalente all'elenco dei parametri posizionali, separati da spazi senza virgolette, ovvero "$1" "$2″.."$N".

Esempio 1:usa Bash $* e $@ per espandere i parametri posizionali

Questo esempio mostra il valore disponibile in $* e $@.

Innanzitutto, crea expan.sh come mostrato di seguito.

$ 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

Quindi, esegui expan.sh come mostrato di seguito per vedere come funzionano $* e $@.

$ ./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
  • Lo script sopra ha esportato il valore di IFS (Internal Field Separator) con il "-".
  • Ci sono tre parametri passati allo script expan.sh $1=”Questo è”,$2=”2″ e $3=”3″.
  • Quando si stampa ogni valore del parametro speciale "$*", viene fornito un solo valore che è l'intero parametro posizionale delimitato da IFS.
  • Mentre "$@" ti fornisce ogni parametro come una parola separata.

Esempio 2:usa $# per contare i parametri posizionali

$# è il parametro speciale in bash che ti dà il numero del parametro posizionale in decimale.

Innanzitutto, crea arithmetic.sh come mostrato di seguito.

$ 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"

Se il numero di parametri posizionali è inferiore a 2, verranno generate le informazioni sull'utilizzo come mostrato di seguito,

$ ./arithemetic.sh 10
Usage: ./arithemetic.sh arg1 arg2

Esempio 3:parametri relativi al processo – $$ e $!

Il parametro speciale $$ fornirà l'ID del processo della shell. $! fornisce l'ID del processo in background eseguito più di recente.

Il seguente script stampa l'ID del processo della shell e esegue l'ultimo ID del processo in background.

$ cat proc.sh
#!/bin/bash

echo -e "Process ID=$$"

sleep 1000 &

echo -e "Background Process ID=$!"

Ora, esegui lo script sopra e controlla l'id del processo che sta stampando.

$ ./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
$

Esempio 4:Altri parametri speciali di Bash – $?, $-, $_

  • $? Fornisce lo stato di uscita dell'ultimo comando eseguito.
  • $- Opzioni impostate utilizzando il comando integrato set
  • $_ Fornisce l'ultimo argomento al comando precedente. All'avvio della shell, fornisce il nome file assoluto dello script della shell in esecuzione.
$ 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.

Nello script precedente, anche l'ultima istruzione echo “echo -e $_” ($ underscore) stampa hB che è il valore dell'ultimo argomento del comando precedente. Quindi $_ darà il valore dopo l'espansione

$ ./others.sh
./others.sh
/home/oracle
Sorry, Command execution failed !
hB
hB

Linux
  1. Bash -c con parametri posizionali?

  2. Condivisione di variabili su più script di shell?

  3. Come fare eco a una nuova riga negli script di Bash Shell

  4. Parametri della riga di comando negli script della shell

  5. È possibile far interagire uno script di shell bash con un altro programma a riga di comando?

Bash Scripting:variabili spiegate con esempi

Scripting Bash – Spiegazione del comando Printf con esempi

Bash Scripting – Array associativo spiegato con esempi

Come creare documenti con gli script Bash

Come utilizzare il comando echo negli script Bash in Linux

Impara gli script Bash multi-threading con GNU Parallel