Variables especiales bash ($ 0, $?, $#, [correo electrónico protegido]</a>, $$, $*)

Variables especiales bash ($ 0, $?, $#, [correo electrónico protegido]</a>, $$, $*)

Bash es un caparazón poderoso que proporciona una amplia gama de variables especiales que se pueden usar para manipular y controlar el comportamiento de los scripts. Estas variables proporcionan información esencial sobre el entorno en el que se ejecuta el script, incluidos los argumentos de línea de comandos, la identificación del proceso actual y el estado del último comando ejecutado.

En este artículo, proporcionaremos una guía en profundidad para todas las variables especiales de Bash, incluidos ejemplos de su uso y dificultades comunes para evitar.

  1. '$ 0' - El nombre del script que se ejecuta.
  2. '$ 1- $ 9' - Los primeros nueve argumentos de línea de comandos.
  3. 'ps' - El número de argumentos de línea de comandos.
  4. 'ps' - Todos los argumentos de línea de comandos como una sola cadena.
  5. '[correo electrónico protegido]' - Todos los argumentos de línea de comandos como una matriz.
  6. 'ps?' - El estado de salida del último comando ejecutado.
  7. '$$' - La identificación del proceso del shell actual.
  8. 'ps!' - La identificación del proceso del último comando de fondo.

Discutamos las variables especiales en detalle con ejemplos.

$ 0 - El nombre del script que se ejecuta

En Bash, $ 0 es un parámetro especial que contiene el nombre del script o shell que se está ejecutando actualmente. También se conoce como el "nombre" o "argumento cero" del guión.

Por ejemplo, supongamos que tiene un script llamado "MyScript.mierda que quieres correr desde cualquier directorio. En ese caso, puede usar la variable $ 0 para determinar el nombre del script que se está ejecutando:

#!/bin/bash echo "El script actual de ejecución es: $ 0"
12#!/bin/bashecho "El script de ejecución actual es: $ 0"

También puede determinar el directorio en el que se encuentra el script y luego usar ese directorio para localizar cualquier archivo que el script necesite.

#!/bin/bash script_dir = "$ (cd" $ (dirname "$ bash_source [0]") "&& pwd)" echo "El script se ejecuta desde $ script_dir"
123#!/bin/bashscript_dir = "$ (cd" $ (dirname "$ bash_source [0]") "&& pwd)" echo "El script se ejecuta desde $ script_dir"

$ 1, $ 2, ..., $ 9 - Argumentos de línea de comandos

El $ 1, $ 2, ..., $ 9 Las variables contienen los primeros nueve argumentos de línea de comandos pasados ​​al script. Estas variables son útiles para crear scripts de shell que aceptan la entrada del usuario.

Por ejemplo, supongamos que tiene un script llamado "saludar.mierda que toma un nombre como su primer argumento de línea de comandos. En ese caso, puede usar el $ 1 variable para recuperar el nombre y luego usarlo en la salida del script.

#!/bin/bash echo "Hola, $ 1!"
12#!/bin/bashecho "Hola, $ 1!"

Si un script necesita acceder a más de nueve argumentos de línea de comandos, el $ 10, $ 11, ..., $ n Se pueden usar variables para recuperarlas. Estas variables se pueden usar con el comando de cambio para procesar argumentos de línea de comandos en lotes. Asegúrese de que la variable esté encerrada con soportes.

$# - El número de argumentos de línea de comandos

El ps La variable contiene el número de argumentos de línea de comandos pasados ​​al script. Esta variable es útil para crear scripts de shell que validan la entrada del usuario.

Por ejemplo, supongamos que tiene un script llamado "validar.mierda"Eso requiere dos argumentos de línea de comandos. En ese caso, puede usar la variable $# para garantizar que se proporcione el número correcto de argumentos.

#!/bin/bash if [[$# -ne 2]] entonces echo "Uso: validar.sh [nombre de usuario] [contraseña] "Salir 1 FI
123456#!/bin/bashif [[$# -ne 2]] luego eco "Uso: validar.sh [nombre de usuario] [contraseña] "Salir 1fi

$* - Todos los argumentos de línea de comandos como una sola cadena

El ps La variable contiene todos los argumentos de línea de comandos pasados ​​al script como una sola cadena. Esta variable es útil para crear scripts de shell que necesitan manipular toda la cadena de línea de comandos.

Por ejemplo, supongamos que tiene un script llamado "unirse.mierda que se une a dos cuerdas proporcionadas como argumentos de línea de comandos. En ese caso, puede usar el ps variable para concatenar las cuerdas.

#!/bin/bash unido = "$*
12#!/bin/bashjoined = "$*

[correo electrónico protegido] - Todos los argumentos de línea de comandos como una matriz

El [correo electrónico protegido] La variable contiene todos los argumentos de línea de comandos pasados ​​al script como una matriz. Esta variable es útil para crear scripts de shell que necesitan manipular argumentos de línea de comandos individuales.

Por ejemplo, supongamos que tiene un script llamado "lista.mierda que enumera todos los archivos en un directorio proporcionado como argumento de línea de comandos. En ese caso, puede usar el [correo electrónico protegido] variable para iterar sobre cada nombre del directorio y enumere los archivos en ese directorio.

#!/bin/bash para directorio en "$@" do echo "archivos de listado en $ directorio:" LS -L $ Directory hecho
123456#!/bin/bashfor directorio en "[correo electrónico protegido]" do echo "archivos de listado en $ directorio:" LS -L $ DirectoryDone

ps? - El estado de salida del último comando ejecutado

El ps? La variable contiene el estado de salida del último comando ejecutado. Esta variable es útil para crear scripts de shell que necesitan manejar errores o tomar diferentes acciones dependiendo del éxito o el fracaso de un comando.

Por ejemplo, supongamos que tiene un script llamado "crea un archivo.mierda que crea un archivo y devuelve un estado de salida que indica éxito o falla. En ese caso, puede usar el $? variable para verificar el estado de salida y tomar las medidas apropiadas.

#!/bin/bash touch myfile.txt si [[$? -eq 0]] luego echo "archivo creado con éxito" el más echo echo "error creando archivo" FI
12345678#!/bin/bashtouch myfile.txtif [[$? -eq 0]] luego echo "archivo creado con éxito" el más echo echo "error creando archivo" FI

$$ - La identificación del proceso del shell actual

El $$ La variable contiene el ID de proceso del script actual. Esta variable es útil para crear scripts de shell que necesitan administrar múltiples procesos o crear nombres de archivos únicos.

Por ejemplo, supongamos que tiene un script llamado "registro.mierda que registra información a un archivo con un nombre único basado en la ID de proceso. En ese caso, puede usar el $$ variable generar un nombre de archivo único.

#!/bin/bash log_file = "log _ $$.txt "echo" registrado para archivar $ log_file "
123#!/bin/bashlog_file = "log _ $$.txt "echo" registrado para archivar $ log_file "

ps! - La identificación del proceso del último comando de fondo

El ps! La variable contiene el ID de proceso del último comando de fondo ejecutado por el script. Esta variable es útil para crear scripts de shell que necesitan administrar múltiples procesos o monitorear el progreso de los comandos de larga duración.

Por ejemplo, supongamos que tiene un script llamado "fondo.mierda que ejecuta un comando en segundo plano y registra su progreso. En ese caso, puede usar el ps! variable para monitorear el progreso del comando.

#!/bin/bash mycommand & pid = $! mientras que PS -P $ PID>/dev/null; Do Echo "El comando sigue ejecutando el comando" Sleep 1 Ded Echo "ha terminado"
12345678#!/bin/bashmycommand & pid = $!mientras que PS -P $ PID>/dev/null; El comando Do Echo "sigue ejecutando el comando" Sleep 1Doneeco "ha terminado"

Conclusión

En conclusión, las variables especiales bash proporcionan información esencial sobre el entorno en el que se ejecuta el script. Estas variables le permiten crear scripts de shell más flexibles, robustos y resistentes a los errores. Al dominar el uso de estas variables, puede llevar sus habilidades de scripts de shell al siguiente nivel.