GNU/Linux >> Tutoriales Linux >  >> Linux

Parámetros especiales de Bash explicados con 4 scripts de Shell de ejemplo

Como parte de nuestra serie de tutoriales de bash en curso, discutimos sobre los parámetros posicionales de bash en nuestro artículo anterior. En este artículo, analicemos los parámetros especiales de bash con algunos ejemplos prácticos de scripts de shell.

Algunos de los parámetros especiales de bash que discutiremos en este artículo son:$*, $@, $#, $$, $!, $?, $-, $_

Para acceder a la lista completa de parámetros posicionales, están disponibles los dos parámetros especiales $* y $@. Fuera de las comillas dobles, estos dos son equivalentes:ambos se expanden a la lista de parámetros posicionales que comienzan con $1 (separados por espacios).

Dentro de las comillas dobles, sin embargo, difieren:$* dentro de un par de comillas dobles es equivalente a la lista de parámetros posicionales, separados por el primer carácter de IFS “$1c$2c$3…”.

$@ dentro de un par de comillas dobles es equivalente a la lista de parámetros posicionales, separados por espacios sin comillas, es decir, “$1” “$2″..”$N”.

Ejemplo 1:use Bash $* y $@ para expandir los parámetros posicionales

Este ejemplo muestra el valor disponible en $* y $@.

Primero, cree el expan.sh como se muestra a continuación.

$ 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

A continuación, ejecute expan.sh como se muestra a continuación para ver cómo funcionan $* y $@.

$ ./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
  • La secuencia de comandos anterior exportó el valor de IFS (separador de campo interno) con el '-'.
  • Hay tres parámetros pasados ​​al script expan.sh $1=”Esto es”,$2=”2″ y $3=”3″.
  • Al imprimir cada valor del parámetro especial "$*", da solo un valor que es el parámetro posicional completo delimitado por IFS.
  • Mientras que "$@" te da cada parámetro como una palabra separada.

Ejemplo 2:Usar $# para contar parámetros posicionales

$# es el parámetro especial en bash que le da el número de parámetros posicionales en decimal.

Primero, cree aritmetic.sh como se muestra a continuación.

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

Si el número de parámetros posicionales es inferior a 2, arrojará la información de uso como se muestra a continuación,

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

Ejemplo 3:Parámetros relacionados con el proceso:$$ y $!

El parámetro especial $$ dará el ID de proceso del shell. ps le brinda la identificación del proceso en segundo plano ejecutado más recientemente.

El siguiente script imprime la identificación del proceso del shell y ejecuta la última identificación del proceso en segundo plano.

$ cat proc.sh
#!/bin/bash

echo -e "Process ID=$$"

sleep 1000 &

echo -e "Background Process ID=$!"

Ahora, ejecute el script anterior y verifique la identificación del proceso que está imprimiendo.

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

Ejemplo 4:Otros parámetros especiales de Bash:$?, $-, $_

  • $? Proporciona el estado de salida del comando ejecutado más recientemente.
  • $- Opciones configuradas usando el comando interno set
  • $_ Da el último argumento al comando anterior. En el inicio del shell, proporciona el nombre de archivo absoluto del script de shell que se está ejecutando.
$ 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.

En el script anterior, la última declaración de eco “echo -e $_” ($ guión bajo) también imprime hB, que es el valor del último argumento del comando anterior. Entonces $_ dará el valor después de la expansión

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

Linux
  1. ¿Cuáles son los parámetros/variables especiales de Shell (bash)?

  2. ¿Compartir variables entre múltiples scripts de shell?

  3. Cómo hacer eco de una nueva línea en Bash Shell Scripts

  4. ¿Es posible hacer que un script bash shell interactúe con otro programa de línea de comandos?

  5. Cómo manejar más de 10 parámetros en shell

Bash Scripting - Variables explicadas con ejemplos

Bash Scripting - Comando Printf explicado con ejemplos

Bash Scripting:matriz asociativa explicada con ejemplos

Cómo crear documentos con scripts Bash

Cómo usar el comando echo en Bash Scripts en Linux

Aprenda secuencias de comandos Bash multihilo con GNU Parallel