https://www.tech-wiki.online/es/bash-scripting.html
Introducción a las secuencias de comandos de Bash Shell
Una descripción detallada de la creación de scripts de Bash Shell
Las secuencias de comandos de shell son una forma poderosa de automatizar las tareas que ejecuta regularmente en su computadora.
En este tutorial, ofrezco una amplia descripción general de los scripts de shell y seré la referencia básica para tutoriales más detallados y avanzados sobre la creación de scripts de shell prácticos.
Echa un vistazo a miintroducción a Bashcorreo.
Bash le brinda un conjunto de comandos que, juntos, pueden usarse para crear pequeños programas, que por convención llamamos scripts.
Note la diferencia. No decimos programación Bash sino scripting Bash, y no llamamos a los scripts Bash “programas Bash”. Esto se debe a que, por lo general, puede alcanzar una cierta complejidad antes de sentir que sus guiones se salen de control.
Pero los scripts de Bash son geniales porque no necesita nada más que Bash para ejecutarlos. Sin compilador, sin intérprete, solo su shell.
Hay muchas cosas que extrañará de los lenguajes de programación como Perl, JavaScript o Python.
Las variables no tienen alcance, todas son globales, no hay una biblioteca estándar, no tienes un sistema de módulos, por ejemplo. Pero las ventajas son bastante grandes: puede invocar muy fácilmente cualquier herramienta CLI como si estuviera en el shell, y el enfoque de Unix de tener muchos pequeños comandos de utilidad realmente hace brillar los scripts de shell. Realice solicitudes de red conwget
, procesar texto usandoawk
, y más.
La creación de scripts de Shell es una de las herramientas que es mejor que conozca, al menos sepa cómo leer un programa cuando lo vea y las ventajas que puede aportar a su trabajo diario.
Este tutorial lo guía a la teoría y los conceptos de scripting Bash. Publicaré tutoriales más detallados sobre técnicas específicas o cómo resolver problemas específicos en el futuro.
Lo esencial
Los scripts se almacenan en archivos. Puede dar cualquier nombre y extensión a un script de shell, no importa. Lo importante es que debe comenzar con un "shebang" en la primera línea:
#!/bin/bash
y debe ser un archivo ejecutable.
Un archivo se establece como ejecutable usandochmod
, un comando de utilidad.
Puedes usarlo así:
chmod u+x myscript
para hacer elmyscript
archivo ejecutable para su usuario (no voy a entrar en el agujero del conejo de permisos aquí, pero los cubriré pronto).
Ahora puede ejecutar el script si está en la misma carpeta llamándolo./myscript
o utilizando la ruta completa.
Mientras aprende, le animo, cuando sea posible, a utilizar un parque infantil en línea.como éste, facilita las pruebas.
Comentarios
Los comentarios son una de las cosas más importantes al escribir programas. Una línea que comienza con el#
El símbolo es un comentario (con la excepción de la línea shebang que vio arriba aquí).
#!/bin/bash
# this is a comment
Un comentario también puede comenzar al final de una línea:
#!/bin/bash
echo ok # this is a comment
Variables
Puede establecer variables mediante el=
operador:
name=value
Ejemplos:
ROOM_NUMBER=237
name=Flavio
nickname="Flavio"
Puede imprimir una variable utilizando elecho
comando incorporado y anteponiendo un$
al nombre de var:
echo $ROOM_NUMBER
echo $name
Operadores
Bash implementa algunos operadores aritméticos que se usan comúnmente en los lenguajes de programación:
+
agregar-
sustraer*
multiplicar/
dividir%
módulo (resto de la división)**
exponenciación
Puede comparar valores usando
<
<=
==
>=
>
También puede utilizar estos operadores de comparación:
-lt
Más bajo que-gt
mas grande que-le
menor o igual que-ge
mayor o igual que-eq
igual a-ne
no igual a
De este modo:
#!/bin/bash
age=23
minimum=18
if test $age -lt $minimum
then
echo "Not old enough"
fi
Operadores logicos:
&&
Y lógico||
OR lógico
Estos atajos permiten realizar una operación aritmética y luego una asignación:
+=
-=
*=
/=
%=
Hay algunos operadores más, pero esos son los más comunes.
Imprimir en la pantalla
Puede imprimir cualquier cosa en la pantalla utilizando elecho
mando:
#!/bin/bash
echo "test"
echo test
echo testing something
Condiciones lógicas
Y: evalúa a0
(cero) si amboscommand
yanothercommand
ejecutar y regresar0
. Devolver cero en los comandos de shell significa que el comando fue exitoso. Un mensaje de error se identifica mediante un valor de retorno distinto de cero.
command && anothercommand
O: evalúa a0
(cero) si al menos uno decommand
yanothercommand
ejecutar y regresar0
.
command || anothercommand
NO: invertir el valor de retorno lógico decommand
:
! command
Estructuras de Control
En puede utilizar varias estructuras de control con las que quizás esté familiarizado:
Declaraciones if / else
Sencilloif
:
if condition
then
command
fi
if
entonceselse
:
if condition
then
command
else
anothercommand
fi
Anidadoif
- entonces -else
:
if condition
then
command
elif
anothercommand
else
yetanothercommand
fi
Puedes quedarte con elelse
en la misma línea usando un punto y coma:
if condition ; then
command
fi
Ejemplo:
#!/bin/bash
DOGNAME=Roger
if [ "$DOGNAME" == "" ]; then
echo "Not a valid dog name!"
else
echo "Your dog name is $DOGNAME"
fi
¿Observa los corchetes? Debemos agregar corchetes cuando tengamos que hacer algún tipo de evaluación de una expresión booleana.
Bucles
Mientras bucle
Mientrascondition
se resuelve en un valor verdadero, ejecutecommand
while condition
do
command
done
Hasta
Hastacondition
se resuelve en un valor verdadero, ejecutecommand
until condition
do
command
done
Porque en
Iterar una lista y ejecutar un comando para cada elemento.
for item in list
do
command
done
Romper y continuar
Dentro de los bucles, puede utilizar elbreak
ycontinue
declaraciones para romper el ciclo por completo, o simplemente omitir la iteración actual.
Caso
Una estructura de control de casos le permite elegir diferentes rutas según un valor.
case value in
a)
command
#...
;;
b)
command
#...
;;
esac
Como confi
,esac
termina la estructura del caso y, como puede notar, escase
deletreado al revés.
Agregamos un punto y coma doble después de cada caso.
A*)
case manejaría todos los casos no expresados explícitamente. Usando un|
símbolo puede expresar múltiples opciones para un solo caso.
Ejemplo:
#!/bin/bash
read -p "How many shoes do you have?" value
case $value in
0|1)
echo "Not enough shoes! You can't walk"
;;
2)
echo "Awesome! Go walk!"
#...
;;
*)
echo "You got more shoes than you need"
#...
;;
esac
Seleccione
Aselect
La estructura muestra al usuario un menú de opciones para elegir:
select item in list
do
command
done
Ejemplo:
#!/bin/bash
select breed in husky setter "border collie" chiwawa STOP
do
if [ "$breed" == "" ]; then
echo Please choose one;
else
break
fi
done
echo “You chose $breed”
Condiciones de prueba
Usé el términocondition
en las estructuras de control anteriores.
Puedes usar eltest
Bash comando incorporado para verificar una condición y devolver un verdadero (0
) o valor falso (no0
).
Aquí hay un ejemplo:
#!/bin/bash
if test "apples" == "apples"
then
echo Apples are apples
fi
if ! test “apples” == “oranges”
then
echo Apples are not oranges
fi
Leer la entrada desde la línea de comando
Puede hacer que sus scripts sean interactivos usando elread
comando incorporado. Este comando lee una línea de la entrada estándar y puede formatear la entrada de una manera muy flexible.
El uso más simple es:
echo "Age:"
read age
esto imprimirá "Edad:" y puede ingresar un número, presione enter y ese número será asignado alage
variable.
los-p
opción deread
proporciona un indicador integrado y coloca la entrada en elage
variable:
read -p "Age: " age
losread
El comando tiene muchas más opciones, que puede inspeccionar escribiendohelp read
en Bash.
Añadiendo opciones
Las opciones se especifican mediante un guión seguido de una letra, como esta:
ls -a
driveCar -b "Ford"
En su código, usa el comando incorporadogetopts
para analizar las opciones y obtener el valor.
Si aceptamos opcionesa
yb
, alimentamosgetopts ab
a un bucle while.
Si la opciónb
acepta un valor, agregamos dos puntos:
después, formateamos nuestrogetopts
llamar así:getopts ab: arg
Aquí hay un fragmento:
while getopts xy: arg
do
case $arg in
x) echo "Option $arg enabled" ;;
y) echo "The value of $arg is $OPTARG" ;;
esac
done
En este guión,$OPTARG
se le asigna automáticamente la letra de opción. Nosotros decimosgetopts
qué opciones aceptamos y manejamos cada caso por separado.
Los errores son manejados automáticamente porgetopts
. Podemos elegir manejar los mensajes de error nosotros mismos, anteponiendo dos puntos.:
antes de la definición de argumentos:getopts :xy: arg
.
Entonces también manejamos el\?
y:
casos. La primera se llama cuando pasamos una opción no válida y la segunda se llama cuando se nos escapa una opción:
while getopts :xy: arg
do
case $arg in
x) echo "Option $arg enabled" ;;
y) echo "The value of $arg is $OPTARG" ;;
:) echo "$0: Must supply an argument to -$OPTARG." >&2
exit 1 ;;
\?) echo "Invalid option -$OPTARG ignored." >&2 ;;
esac
done
Ahora, si se olvida de agregar un argumento, los mensajes de error son diferentes.
Trabajando con parámetros
Dentro de un script puede acceder a cualquier parámetro que se haya pasado en el momento de la invocación. Usted accede a ellos usando$0
,$1
,$2
y así sucesivamente, dependiendo de la posición, donde$0
es el nombre del comando y al incrementar el número se incrementa la posición del parámetro. Después de la posición 9 necesitas llaves:${10}
,${11}
...
Por ejemplo ejecutando estostartCar
texto:
#!/bin/bash
echo $0
echo $1
como./startCar fiesta
imprimirá
./startCar
fiesta
El especial$*
la sintaxis imprime todos los parámetros y$#
el número de parámetros pasados:
#!/bin/bash
echo $# $*
./test.sh Milan Florence Rome
3 Milan Florence Rome
Separar opciones de parámetros
Si tiene tanto opciones como parámetros, debe separarlos. Haces esto con un guion:
driveCar -m "Ford Fiesta" - Milan Florence Rome
Trabajando con cadenas
Dada una cadena:
dogname="Roger"
Puedes obtener su longitud usando${#dogname}
Siempre use comillas alrededor de las cadenas, cuando trabaje con ellas, para evitar que Bash interprete los caracteres especiales dentro de ellas.
Puede comparar 2 cadenas usando el=
o==
operador, es lo mismo:
"$dogname" = "$anotherdogname"
"$dogname" == "$anotherdogname"
No es una tarea debido a los espacios que rodean el=
.
También puede verificar la desigualdad:
"$dogname" != "$anotherdogname"
Matrices
Una matriz es una lista de elementos, declarados entre paréntesis:
breeds=(husky setter "border collie" chiwawa)
Puede hacer referencia a cualquier elemento dentro de una matriz utilizando corchetes:
breeds[0]
breeds[1]
y puede obtener el número total de elementos utilizando esta sintaxis especial:
${#breeds[@]}
Comandos incorporados
Hasta ahora, ya ha visto algunos comandos integrados, como estos:
test
read
echo
Bash tiene varios de ellos. Puedes verlos a todos llamandohelp
y luego puede encontrar la ayuda para cada comando usando por ejemplohelp read
.
Funciones
Al igual que en JavaScript o en cualquier otro lenguaje de programación, puede crear pequeños fragmentos de código reutilizables, darles un nombre y llamarlos cuando lo necesite.
Bash los llamafunciones.
Define una función con
function name {
}
Ejemplo:
function cleanFolder {
}
y lo invocas así:
cleanFolder
Puede pasar parámetros a carpetas, sin la necesidad de declararlas, simplemente haga referencia a ellas como$1
,$2
etc. Como lo hace con los parámetros de la secuencia de comandos:
function cleanFolder {
echo "Clean folder $1"
}
cleanFolder "/Users/flavio/Desktop"
Descarga mi gratisManual de comandos de Linux
Más tutoriales de cli:
- El caparazón de Bash
- Introducción a las secuencias de comandos de Bash Shell
- La concha de pescado
- Shell, mira el contenido del archivo a medida que se completa
- Cómo salir de Vim
- Editores de UNIX
- Los comandos del sistema de archivos de UNIX
- Tutorial de shells de Unix
- Cómo establecer un alias en un shell de macOS o Linux
- Una guía práctica de Homebrew
- Cómo corregir el error de ruta de desarrollador activa no válida de xcrun en macOS
- La línea de comandos para principiantes completos
- Introducción a Linux
- Cómo encontrar el proceso que está usando un puerto
- Comandos de Linux: mkdir
- Comandos de Linux: cd
- Comandos de Linux: pwd
- Comandos de Linux: rmdir
- Comandos de Linux: ls
- Comandos de Linux: mv
- Comandos de Linux: cp
- Comandos de Linux: menos
- Comandos de Linux: tail
- Comandos de Linux: toque
- Comandos de Linux: cat
- Comandos de Linux: buscar
- Comandos de Linux: ln
- Comandos de Linux: ps
- Comandos de Linux: echo
- Comandos de Linux: arriba
- Comandos de Linux: matar
- Comandos de Linux: killall
- Comandos de Linux: alias
- Comandos de Linux: trabajos
- Comandos de Linux: bg
- Comandos de Linux: fg
- Comandos de Linux: escriba
- Comandos de Linux: que
- Comandos de Linux: whoami
- Comandos de Linux: quién
- Comandos de Linux: borrar
- Comandos de Linux: su
- Comandos de Linux: sudo
- Comandos de Linux: chown
- Comandos de Linux: chmod
- Comandos de Linux: passwd
- Comandos de Linux: abrir
- Comandos de Linux: wc
- Comandos de Linux: historia
- Comandos de Linux: du
- Comandos de Linux: umask
- Comandos de Linux: grep
- Comandos de Linux: man
- Comandos de Linux: uname
- Comandos de Linux: ordenar
- Comandos de Linux: uniq
- Comandos de Linux: diff
- Comandos de Linux: nohup
- Comandos de Linux: df
- Comandos de Linux: xargs
- Comandos de Linux: gzip
- Comandos de Linux: gunzip
- Comandos de Linux: ping
- Comandos de Linux: traceroute
- Comandos de Linux: tar
- Comandos de Linux: exportar
- Comandos de Linux: crontab
- Comandos de Linux: dirname
- Comandos de Linux: nombre base
- Comandos de Linux: printenv
- Comandos de Linux: env
- Una breve guía para el editor de educación
- Una breve guía de vim
- Una breve guía de emacs
- Una breve guía de nano
- Linux, no queda espacio en el dispositivo
- Cómo usar Netcat
No hay comentarios:
Publicar un comentario