Las variables son cruciales cuando escribe scripts y desea comprender qué hace el código que desea cortar y pegar de la web en su computadora Linux. ¡Te prepararemos para comenzar!
Variables 101
Las variables son símbolos con nombre que representan una cadena o un valor numérico. Cuando los usa en comandos y expresiones, se tratan como si hubiera ingresado el valor que contienen en lugar del nombre de la variable.
Para crear una variable, simplemente ingrese un nombre y un valor para ella. Los nombres de sus variables deben ser descriptivos y recordarle el valor que contienen. Un nombre de variable no puede comenzar con un número y no puede contener espacios. Sin embargo, puede comenzar con un guión bajo. Aparte de eso, puede utilizar cualquier combinación de letras alfanuméricas mayúsculas y minúsculas.
Ejemplos
Aquí creamos cinco variables. El formato es ingresar el nombre, el signo igual=
y el valor. Tenga en cuenta que no hay espacio antes ni después del signo igual. Asignar un valor a una variable a menudo se denomina asignar un valor a una variable.
Creamos cuatro variables de cadena y una variable numérica,this_year:
me=Dave
my_boost=Linux
him=Popeye
his_boost=Spinach
this_year=2019
Aver el valormantenido en una variable, use esoecho
Dominio. El nombre de la variable debe ir precedido de un signo de dólar.$
siempre que haga referencia al valor contenido en él, como se muestra a continuación:
echo $my_name
echo $my_boost
echo $this_year
Usemos todas nuestras variables a la vez:
echo "$my_boost is to $me as $his_boost is to $him (c) $this_year"
Los valores de las variables reemplazan sus nombres. También puedes cambiar los valores de las variables. Para asignar un nuevo valor a la variable,my_boost
, simplemente repite lo que hiciste al asignar el primer valor, así:
my_boost=Tequila
Si ejecutas el comando anterior nuevamente obtendrás un resultado diferente:
echo "$my_boost is to $me as $his_boost is to $him (c) $this_year"
Entonces puedes usar el mismo comando apuntando a las mismas variables y obtener resultados diferentes si cambias los valores contenidos en las variables.
Hablaremos sobre citar variables más adelante. Aquí hay algunas cosas para recordar por ahora:
- Una variable entre comillas simples
'
se trata como una cadena literal y no como una variable. - Variables entre comillas
"
son tratados como variables. - Para obtener el valor almacenado en una variable, debe especificar el signo de dólar
$
. - Una variable sin signo de dólar
$
solo devuelve el nombre de la variable.
También puede crear una variable cuyo valor se tome de una variable existente o de un número de variables. El siguiente comando define una nueva variable llamadadrink_of_the_Year,
y le muestra los valores combinados de losmy_boost
ythis_year
Variables:
drink_of-the_Year="$my_boost $this_year"
echo drink_of_the-Year
Cómo utilizar variables en scripts
Los scripts quedarían completamente paralizados sin variables. Las variables proporcionan la flexibilidad que hace que un script sea una solución general en lugar de específica. Para ilustrar la diferencia, aquí hay un script que convierte los archivos en/dev
Directorio.
Ingrese esto en un archivo de texto y luego guárdelo comofcnt.sh
(¿para?recuento de archivos?):
#!/bin/bash folder_to_count=/dev file_count=$(ls $folder_to_count | wc -l) echo $file_count files in $folder_to_count
Antes de poder ejecutar el script, debe hacerlo ejecutable como se muestra a continuación:
chmod +x fcnt.sh
Para ejecutar el script, ingrese:
./fcnt.sh
Esto imprime el número de archivos en el/dev
Directorio. Así es como funciona:
- una variable llamada
folder_to_count
está definido y contiene la cadena ?/dev?. - Otra variable, llamada
file_count
, se define. Esta variable obtiene su valor de una sustitución de comando. Este es el conjunto de comandos entre paréntesis.$( )
. Tenga en cuenta que hay un signo de dólar$
antes del primer corchete. Esta construcción$( )
evalúa los comandos entre paréntesis y luego devuelve su valor final. En este ejemplo, este valor se le da al . asignadofile_count
Variable. En cuanto a esofile_count
En lo que respecta a la variable, se le ha pasado un valor a mantener; no se trata de cómo se determinó el valor. - El comando evaluado en la sustitución de comandos ejecuta un
ls
Listado de archivos en el directorio imfolder_to_count
¿Variable que apunta a?/dev.? se estableció. Entonces el script ejecuta el comando ?ls /dev? fuera de. - La salida de este comando estará en el
wc
Dominio. El-l
Causas de la opción (número de línea)wc
acontar el número de líneasen la edición dels
Dominio. Dado que cada archivo aparece en una línea separada, este es el número de archivos y subdirectorios en el directorio ?/dev?. Este valor se le da al . asignadofile_count
Variable. - La última línea usa echo para imprimir el resultado.
Sin embargo, esto sólo funciona para el directorio ?/dev?. ¿Cómo podemos hacer que el script funcione con cualquier directorio? Todo lo que necesitas es un pequeño cambio.
Cómo utilizar parámetros de línea de comando en scripts
Muchos comandos, comols
ywc
, acepte los parámetros de la línea de comando. Estos proporcionan información al comando para que sepa qué hacer. Si lo quieresls
para trabajar en su directorio personal ytambién para mostrar archivos ocultos, puedes usar el siguiente comando, donde la tilde~
y el-a
(todas) las opciones son parámetros de línea de comando:
ls ~ -a
Nuestros scripts pueden aceptar parámetros de línea de comando. Se les hace referencia como$1
para el primer parámetro,$2
segundo y así sucesivamente hasta$9
para el noveno parámetro. (En realidad hay un$0
, también, pero eso está reservado para mantener siempre el guión).
Puede hacer referencia a los parámetros de la línea de comando en un script como variables regulares. Modifiquemos nuestro script como se muestra a continuación y guárdelo con el nuevo nombre.fcnt2.sh
:
#!/bin/bash folder_to_count=$1 file_count=$(ls $folder_to_count | wc -l) echo $file_count files in $folder_to_count
Esta vez esfolder_to_count
A la variable se le asigna el valor del primer parámetro de la línea de comando,$1
.
El resto del guión funciona igual que antes. En lugar de una solución específica, su guión ahora es general. Puede usarlo en cualquier directorio ya que no está codificado para funcionar solo con ?/dev? trabajar.
Para hacer que el script sea ejecutable:
chmod +x fcnt2.sh
Ahora pruebe con algunos directorios. Puede ejecutar "/dev" primero para asegurarse de obtener el mismo resultado que antes. Introduzca la siguiente:
./fnct2.sh /dev
./fnct2.sh /etc
./fnct2.sh /bin
Obtendrá el mismo resultado (207 archivos) que antes para el directorio ?/dev?. Esto es alentador y obtendrá resultados específicos del directorio para cada uno de los demás parámetros de la línea de comando.
Para acortar el script, puedes prescindir de la variable,folder_to_count
, general y solo de referencia$1
continuamente de la siguiente manera:
#!/bin/bash file_count=$(ls $1 wc -l) echo $file_count files in $1
Trabajar con variables especiales
hemos mencionado$0
, que siempre se establece en el nombre de archivo del script. Esto le permite utilizar el script para, por ejemplo, generar su nombre correctamente incluso si se le ha cambiado el nombre. Esto es útil en situaciones de registro en las que desea saber el nombre del proceso que agregó una entrada.
A continuación se muestran las otras variables preestablecidas especiales:
- ps: cuántos parámetros de línea de comando se pasaron al script.
- ps: Todos los parámetros de la línea de comando pasados al script.
- ps: El estado de salida del último proceso en ejecución.
- $$: El ID del proceso (PID) del script actual.
- $USUARIO: El nombre de usuario del usuario que ejecuta el script.
- $ NOMBRE DE HOST: El nombre de host de la computadora donde se ejecuta el script.
- $SEGUNDOS: la cantidad de segundos durante la ejecución del script.
- $aleatorio: Devuelve un número aleatorio.
- $ lino: Devuelve el número de línea actual del script.
Quieres verlos todos en un solo guión, ¿no? ¡Puede! Guarde lo siguiente como un archivo de texto llamadospecial.sh
:
#!/bin/bash echo "There were $# command line parameters" echo "They are: $@" echo "Parameter 1 is: $1" echo "The script is called: $0" # any old process so that we can report on the exit status pwd echo "pwd returned $?" echo "This script has Process ID $$" echo "The script was started by $USER" echo "It is running on $HOSTNAME" sleep 3 echo "It has been running for $SECONDS seconds" echo "Random number: $RANDOM" echo "This is line number $LINENO of the script"
Para hacerlo ejecutable, ingrese:
chmod +x special.sh
Ahora puede ejecutarlo con varios parámetros de línea de comando diferentes, como se muestra a continuación.
Variables de entorno
Bash utiliza variables de entorno para definir y registrar las propiedades del entorno que crea cuando se inicia. Estos contienen información a la que Bash puede acceder fácilmente, como por ejemplo: Como su nombre de usuario, su configuración regional, la cantidad de comandos que puede contener su archivo de historial, su editor predeterminado y más.
Para ver las variables de entorno activas en su sesión de bash, use este comando:
env | less
A medida que navega por la lista, puede encontrar algunos a los que pueda hacer referencia en sus scripts.
Cómo exportar variables
Cuando se ejecuta un script, está en su propio proceso y las variables utilizadas no son visibles fuera de ese proceso. Si desea compartir una variable con otro script que inicie su script, debe exportar esa variable. Le mostraremos cómo hacer esto con dos scripts.
Primero, guarde lo siguiente con el nombre del archivoscript_one.sh
:
#!/bin/bash first_var=alpha second_var=bravo # check their values echo "$0: first_var=$first_var, second_var=$second_var" export first_var export second_var ./script_two.sh # check their values again echo "$0: first_var=$first_var, second_var=$second_var"
Esto crea dos variables,first_var
ysecond_var
y asigna algunos valores. Los imprime en la ventana del terminal, exporta las variables y llamascript_two.sh
. Siscript_two.sh
sale y el flujo del proceso regresa a este script, imprime las variables nuevamente en la ventana del terminal. Entonces podrás ver si han cambiado.
El segundo script que usaremos esscript_two.sh
. Este es el guión quescript_one.sh
Llamadas. Introduzca la siguiente:
#!/bin/bash # check their values echo "$0: first_var=$first_var, second_var=$second_var" # set new values first_var=charlie second_var=delta # check their values again echo "$0: first_var=$first_var, second_var=$second_var"
Este segundo script imprime los valores de las dos variables, les asigna nuevos valores y luego los imprime nuevamente.
Para ejecutar estos scripts debe ingresar lo siguiente para que sean ejecutables:
chmod +x script_one.sh chmod +x script_two.sh
Y ahora escribe lo siguiente para comenzar.script_one.sh
:
./script_one.sh
Esto es lo que nos dice el resultado:
- script_one.shimprime los valores de las variables que son Alpha y Bravo.
- script_two.shimprime los valores de las variables (Alfa y Bravo) tal como se reciben.
- script_two.shlos cambia a Charlie y Delta.
- script_one.shimprime los valores de las variables, que siguen siendo Alpha y Bravo.
Lo que sucede en el segundo guión permanece en el segundo guión. Es como si se enviaran copias de las variables al segundo script pero se descartaran cuando ese script sale. Las variables originales en el primer script no cambian por nada de lo que les suceda a sus copias en el segundo.
Cómo cotizar variables
Es posible que haya notado que los scripts que hacen referencia a variables están entre comillas."
. Esto permite hacer referencia a las variables correctamente para que sus valores se utilicen cuando se ejecuta la línea en el script.
Si el valor que está asignando a una variable contiene espacios, deben estar entre comillas cuando los asigne a la variable. Esto se debe a que Bash usa un espacio como separador de forma predeterminada.
Aquí hay un ejemplo:
site_name=How-To Geek
Bash ve el espacio antes de ?Geek? para indicar que se está iniciando un nuevo comando. Informa que no existe tal comando y sale de la línea.echo
nos muestra que elsite_name
¿La variable no contiene nada? ni siquiera el texto de instrucciones.
Inténtelo de nuevo con comillas alrededor del valor como se muestra a continuación:
site_name="How-To Geek"
Esta vez se reconoce como un valor único y elsite_name
Variable.
eco es tu amigo
Puede llevar algún tiempo acostumbrarse a ordenar la sustitución, citar variables y recordar cuándo insertar el signo de dólar.
Antes de presionar Enter y ejecutar una serie de comandos bash, intente usarecho
antes. De esta manera podrás asegurarte de que suceda lo que deseas. También puede detectar cualquier error de sintaxis.
Comandos de Linux | ||
archivos | teer·pv·Gato·tac·chmod·grep·diferencia·sed·Con·Mann·empujado·popd·fsck·disco de prueba·secuencia·fd·pandoc·CD·$RUTA·awk·unirse·jq·doblar·único·diarioctl·cola·estadística·es·fstab·Eco·menos·chgrp·chown·Rdo·mirar·Saitén·tipo·rebautizar·Código Postal·deshacer·montar·montar·Instalar·disco duro·mkfs·habitación·es rm·sincronización·df·gpg·nosotros·nano·mkdir·von·en·Parche·Convertir·rclón·jirones·srm | |
Procesos | alias·Pantalla·arriba·neto·riñones·Progreso·rastro·Sistema·tmux·chsh·Historia·en·Cargar·gratis·cual·dmesg·chfn·Modificación de usuario·PD·chroot·xargos·tty·dedo meñique·lsof·vmstat·Se acabó el tiempo·Mauer·si de hecho·matar·Dormir·sudo·Es·Tiempo·agregar grupo·Modificación de usuario·El grupo·etc.·apagar·empezar de nuevo·Detener·apagar·contraseña·lscpu·crontab·Dato·bg·fg | |
Redes | netstat·Anillo·ruta de seguimiento·IP·ss·quién es·falla2ban·bmon·Ella·Dedo·nmapa·ftp·rizo·obtener·Nosotros somos·quién soy·w·iptables·ssh-keygen·ufff |
Las mejores computadoras portátiles con Linux para desarrolladores y entusiastas