Variables de Shell
En la programación Shell, una variable es un nombre utilizado para almacenar valores de datos.
Al definir una variable, el nombre de la variable no lleva el signo de dólar ($, que sí se requiere en PHP), por ejemplo:
Nota: no debe haber espacios entre el nombre de la variable y el signo igual; esto puede ser diferente de todos los lenguajes de programación que conoces. Además, la nomenclatura de las variables debe seguir las siguientes reglas:
- Solo debe contener letras, números y guiones bajos:El nombre de la variable puede contener letras (sensibles a mayúsculas/minúsculas), números y guiones bajos,_y no puede contener otros caracteres especiales.
- No puede comenzar con un número:El nombre de la variable no puede comenzar con un número, pero puede contener números.
- Evita usar palabras clave de Shell:No uses palabras clave de Shell (por ejemplo, if, then, else, fi, for, while, etc.) como nombres de variables, para evitar confusiones.
- Usa mayúsculas para las constantes:Por convención, los nombres de variables de constantes suelen usar mayúsculas, por ejemploPI=3.14。
- Evita usar símbolos especiales:Evita en la medida de lo posible usar símbolos especiales en los nombres de variables, ya que pueden entrar en conflicto con la sintaxis de Shell.
- Evita usar espacios:El nombre de la variable no debe contener espacios, porque los espacios se usan normalmente para separar comandos y argumentos.
Ejemplos de nombres de variables válidos en Shell:
EJEMPLO="www.example.com" LD_LIBRARY_PATH="/bin/" _var="123" var2="abc"
Nombres de variables no válidos:
# 避免使用if作为变量名 if="some_value" # 避免使用 $ 等特殊符号 variable_with_$=42 ?var=123 user*name=ejemplo # 避免空格 variable with space="value"
Evita espacios a ambos lados del signo igual:
# 正确的赋值 variable_name=value # 有可能会导致错误 variable_name = value
Además de la asignación directa y explícita, también se puede asignar un valor a una variable mediante una sentencia, como:
o
for file in $(ls /etc)
La sentencia anterior recorre los nombres de los archivos del directorio /etc.
Usar variables
Para usar una variable ya definida, solo tienes que anteponer el signo de dólar al nombre de la variable, como:
Ejemplo
echo $your_name
echo ${your_name}
Las llaves alrededor del nombre de la variable son opcionales; se pueden poner o no. Se añaden para ayudar al intérprete a identificar los límites de la variable, como en el siguiente caso:
Ejemplo
echo "I am good at ${skill}Script"
done
Si no se ponen llaves alrededor de la variable skill y se escribe echo "I am good at $skillScript", el intérprete tratará $skillScript como una variable (cuyo valor está vacío), y el resultado de la ejecución del código no será el esperado.
Se recomienda poner llaves a todas las variables; es un buen hábito de programación.
Una variable ya definida puede redefinirse, como:
Ejemplo
echo $your_name
your_name="alibaba"
echo $your_name
Esta escritura es válida, pero ten en cuenta que en la segunda asignación no se debe escribir $your_name="alibaba"; el signo de dólar ($) se añade solo al usar la variable.
Variables de solo lectura
El comando readonly se puede usar para definir una variable como de solo lectura; el valor de una variable de solo lectura no puede cambiarse.
El siguiente ejemplo intenta cambiar una variable de solo lectura y muestra un error:
Ejemplo
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.example.com"
Al ejecutar el script, el resultado es el siguiente:
/bin/sh: NAME: This variable is read only.
Eliminar variables
El comando unset se puede usar para eliminar una variable. Sintaxis:
unset variable_name
Una vez eliminada la variable, no se puede volver a usar. El comando unset no puede eliminar variables de solo lectura.
Ejemplo
Ejemplo
myUrl="https://www.example.com"
unset myUrl
echo $myUrl
La ejecución del ejemplo anterior no producirá ninguna salida.
Tipos de variables
Shell admite diferentes tipos de variables; algunos de los principales incluyen:
Variables de cadena:En Shell, las variables se tratan normalmente como cadenas.
Puedes usar comillas simples'o comillas dobles"para definir cadenas, por ejemplo:
my_string='Hello, World!' 或者 my_string="Hello, World!"
Variables enteras: en algunos Shell, puedes usar eldeclareotypesetcomando para declarar variables enteras.
Tales variables solo contienen valores enteros, por ejemplo:
declare -i my_integer=42
Esta declaración le indica a Shell que trate my_integer como un entero; si se intenta asignar un valor no entero, Shell intentará convertirlo a entero.
Variables de array:Shell también admite arrays, lo que permite almacenar múltiples valores en una variable.
Los arrays pueden ser arrays indexados por enteros o arrays asociativos; a continuación se muestra un ejemplo de un array indexado por enteros simple:
my_array=(1 2 3 4 5)
O un array asociativo:
declare -A associative_array associative_array["name"]="John" associative_array["age"]=30
Variables de entorno:Son variables especiales establecidas por el sistema operativo o el usuario, utilizadas para configurar el comportamiento de Shell e influir en su entorno de ejecución.
Por ejemplo, la variable PATH contiene las rutas en las que el sistema operativo busca archivos ejecutables:
echo $PATH
Variables especiales:Hay algunas variables especiales que tienen un significado especial en Shell, por ejemplo$0representa el nombre del script,$1, $2, etc. representan los argumentos del script.
$#representa el número de argumentos pasados al script,$?representa el estado de salida del comando anterior, etc.
Cadenas de Shell
Las cadenas son el tipo de datos más común y útil en la programación Shell (aparte de números y cadenas, no hay muchos otros tipos útiles). Las cadenas pueden usar comillas simples, comillas dobles, o ninguna comilla.
Comillas simples
str='this is a string'
Limitaciones de las cadenas entre comillas simples:
- Cualquier carácter dentro de comillas simples se muestra tal cual; las variables dentro de cadenas entre comillas simples no son válidas.
- En una cadena entre comillas simples no puede aparecer una comilla simple individual (ni siquiera con carácter de escape), pero pueden aparecer en pares, usadas para concatenar cadenas.
Comillas dobles
Ejemplo
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str
El resultado de salida es:
Hello, I know you are "ejemplo"!
Ventajas de las comillas dobles:
- Puede haber variables dentro de comillas dobles
- Pueden aparecer caracteres de escape dentro de comillas dobles
Concatenar cadenas
Ejemplo
# Concatenar con comillas dobles
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# Concatenar con comillas simples
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
El resultado de salida es:
hello, ejemplo ! hello, ejemplo !
hello, ejemplo ! hello, ${your_name} !
Obtener la longitud de una cadena
Ejemplo
echo ${#string} # Salida: 4
Cuando la variable es una cadena,${#string}es equivalente a${#string[0]}:
Ejemplo
echo ${#string[0]} # Salida: 4
Extraer subcadenas
El siguiente ejemplo comienza desde el carácter número2de la cadena y extrae4caracteres:
Ejemplo
echo ${string:1:4} # Salida: unoo
Nota: el índice del primer carácter es0。
Buscar subcadenas
Busca la posición del carácterioo(se calcula la posición de la letra que aparezca primero):
Ejemplo
echo `expr index "$string" io` # Salida: 4
Nota:En el script anterior,`son comillas invertidas (backticks), no comillas simples', no te confundas.
Arrays de Shell
Bash admite arrays unidimensionales (no admite arrays multidimensionales) y no limita el tamaño del array.
Similar al lenguaje C, los índices de los elementos de un array comienzan en 0. Para obtener un elemento del array se utiliza el índice; el índice puede ser un entero o una expresión aritmética, y su valor debe ser mayor o igual que 0.
Definir arrays
En Shell, los arrays se representan con paréntesis y los elementos del array se separan con espacios. La forma general de definir un array es:
数组名=(值1 值2 ... 值n)
Por ejemplo:
array_name=(value0 value1 value2 value3)
O bien
array_name=( value0 value1 value2 value3 )
También se pueden definir por separado los distintos componentes del array:
array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen
No es necesario usar índices consecutivos, y el rango de los índices no tiene límite.
Leer arrays
El formato general para leer el valor de un elemento del array es:
${nombre_del_array[índice]}
Por ejemplo:
valuen=${array_name[n]}
Usar@El símbolo puede obtener todos los elementos del arreglo, por ejemplo:
echo ${array_name[@]}
Obtener la longitud del array
El método para obtener la longitud de un arreglo es el mismo que para obtener la longitud de una cadena, por ejemplo:
Ejemplo
length=${#array_name[@]}
# O bien
length=${#array_name[*]}
# Obtener la longitud de un solo elemento del arreglo
length=${#array_name[n]}
Comentarios en Shell
con#Las líneas que comienzan con # son comentarios y el intérprete las ignorará.
Añadiendo un símbolo # a cada línea#se pueden establecer comentarios multilínea, así:
Ejemplo
# Este es un comentario
# autor: Tutorial de novatos
# site:www.example.com
# slogan: lo que se aprende no es solo tecnología, ¡sino también sueños!
#--------------------------------------------
##### Inicio de la zona de configuración de usuario #####
#
#
# Aquí se puede agregar información descriptiva del script
#
#
##### Fin de la zona de configuración de usuario #####
Si durante el desarrollo encuentras un gran bloque de código que necesita ser comentado temporalmente y luego descomentado, ¿qué deberías hacer?
Agregar el símbolo # a cada línea es demasiado laborioso. Se puede encerrar el bloque de código a comentar entre llaves y definirlo como una función; si no se llama a esa función en ningún lugar, este código no se ejecutará, logrando el mismo efecto que un comentario.
Comentarios de varias líneas
Usar Here Document
Los comentarios multilínea también pueden usar el siguiente formato:
Contenido del comentario...
Contenido del comentario...
Contenido del comentario...
EOF
EOF también puede usar otros símbolos:
Ejemplo
Esta es la parte del comentario.
Puede tener múltiples líneas de contenido.
COMMENT
:<<'
Contenido del comentario...
Contenido del comentario...
Contenido del comentario...
'
:<<!
Contenido del comentario...
Contenido del comentario...
Contenido del comentario...
!
Usar directamente el símbolo :
También podemos usar los dos puntos:como comando, y usar comillas simples'para encerrar múltiples líneas de contenido. Como los dos puntos son un comando vacío, este contenido no se ejecutará.
El formato es:: + espacio + comillas simples。
Ejemplo
Esta es la parte del comentario.
Puede tener múltiples líneas de contenido.
'