Cómo utilizar la programación del shell de Linux para la gestión del sistema y de la red
Desde la perspectiva de un programador, Shell en sí es un programa escrito en lenguaje C. Desde la perspectiva de un usuario, Shell es el puente entre los usuarios y el sistema operativo Linux. Los usuarios no solo pueden ingresar comandos para su ejecución, sino también usar la programación de scripts de Shell para completar operaciones más complejas. Hoy en día, a medida que las GUI de Linux se vuelven cada vez más sofisticadas, la programación Shell todavía desempeña un papel que no se puede ignorar en áreas como la gestión de sistemas. Una comprensión profunda y un dominio de la programación Shell es una de las tareas obligatorias para todo usuario de Linux.
Linux tiene muchos tipos de Shell, los más comunes son: Bourne Shell (/usr/bin/sh o /bin/sh), Bourne Again Shell (/bin/bash), C Shell (/usr /bin /csh), K Shell (/usr/bin/ksh), Shell para raíz (/sbin/sh), etc. Los diferentes lenguajes de shell tienen diferentes sintaxis, por lo que no se pueden usar indistintamente. Cada Shell tiene sus propias características, básicamente, dominar cualquiera de ellos es suficiente. En este artículo, nos centramos en Bash, Bourne Again Shell. Debido a que es fácil de usar y gratuito, Bash se usa ampliamente en el trabajo diario y también es el Shell predeterminado para la mayoría de los sistemas Linux. En circunstancias normales, la gente no distingue entre Bourne Shell y Bourne Again Shell, por lo que en el siguiente texto podemos ver #!/bin/sh, que también se puede cambiar a #!/bin/bash.
El formato para escribir scripts de Shell usando editores de texto como vi es fijo, de la siguiente manera:
#!/bin/sh
#comments
Tus comandos van aquí
El símbolo #! en la primera línea le dice al sistema que el programa especificado en la ruta siguiente es el programa Shell que interpreta este archivo de script. Si no existe tal oración en la primera línea, se producirá un error al ejecutar el archivo de secuencia de comandos. La parte siguiente es el programa principal. Los scripts de Shell, al igual que los lenguajes de alto nivel, también tienen asignaciones de variables y declaraciones de control. Excepto por la primera línea, las líneas que comienzan con # son líneas de comentarios hasta el final de esta línea. Si una línea no está completa, puede agregar "" al final de la línea. Este símbolo indica que la siguiente línea y esta línea se fusionarán en la misma línea.
Después de editar, guarde el script. como filename.sh, y el sufijo del nombre del archivo sh indica que este es un archivo de script Bash. Al ejecutar el script, primero debe cambiar los atributos del archivo de script a ejecutable:
chmod x filename.sh<. /p>
El método para ejecutar el script es:
./filename.sh
Comencemos con el clásico “hola mundo” y veamos cuál es el más simple. El script de Shell se ve así:
#! /bin/sh
#print hola mundo en la ventana de la consola
a = "hola mundo"
echo $a
Shell Script es un lenguaje de tipo débil. Cuando se utiliza una variable, no es necesario declarar su tipo primero. La nueva variable se almacenará en el área de datos local. es propiedad del Shell actual y ningún proceso secundario puede acceder a estas variables locales. A diferencia de las variables de entorno, las variables de entorno se almacenan en otra área de memoria, llamada área de entorno del usuario. Los procesos secundarios pueden acceder a las variables de esta memoria.
La forma de asignar un valor a una variable es:
nombre_variable = valor_variable
Si asignas un valor a una variable que ya tiene un valor, el nuevo valor reemplazará el valor anterior . Al obtener el valor, agregue $ antes del nombre de la variable. $variable_name se puede usar entre comillas. Esto es obviamente diferente de otros lenguajes de alto nivel. Si hay confusión, puede usar llaves para distinguir, por ejemplo:
echo "Hola, $as"
No generará "Hola, hola mundos", pero sí "Hola," Esto se debe a que Shell trata a $as como una variable y a $as no se le ha asignado un valor, por lo que su valor está vacío. El método correcto es:
echo "Hola, ${a}s"
Las variables entre comillas simples no serán reemplazadas por variables.
En cuanto a las variables, también es necesario conocer varios comandos de Linux relacionados con ellas.
env se usa para mostrar variables y sus valores en el área del entorno del usuario; set se usa para mostrar variables y sus valores en el área de datos locales y unset se usa para eliminar; el valor actual de la variable especificada, que se especificará como NULL; el comando de exportación se utiliza para transferir variables en el área de datos local al área del entorno del usuario.
Echemos un vistazo a un ejemplo más complejo. Combinado con este ejemplo, hablaremos sobre la sintaxis de Shell Script.
1 #!/bin/bash
2 # tenemos menos de 3 argumentos Imprime el texto de ayuda:
3 if [ $# -lt 3. ]; luego
4 catlt;lt;HELP
5 ren - cambia el nombre de varios archivos usando expresiones regulares sed
6
7 USO: ren 'regexp' 'archivos de reemplazo'
8 EJEMPLO: renombrar todos los archivos *.HTM en *.html:
9 ren 'HTM$' 'html' * .HTM
10
11 AYUDA
12 salida 0
13 fi
14 VIEJO="$1 "
15 NEW="$2"
16 # El comando shift elimina un argumento de la lista de
17 # argumentos de la línea de comando.
18 turno
19 turno
20 # $* contiene ahora todos los archivos:
21 para el archivo en $*;
22 if [ -f "$archivo" ]; entonces
23 newfile=`echo "$archivo" | sed "s/${OLD}/${NEW}/g"`
24 if [ -f "$newfile" ]; entonces
25 echo "ERROR: $newfile ya existe"
26 else
27 echo "cambiar el nombre de $file a $newfile "
28 mv "$file" "$newfile"
29 fi
30 fi
31 hecho
Veámoslo desde el principio. Las dos primeras líneas se han explicado en el ejemplo anterior. A partir de la tercera línea, hay contenido nuevo. La declaración if es similar a otros lenguajes de programación y es una declaración de control de flujo. Su sintaxis es:
si… entonces
elif… entonces
…
más
…
fi
A diferencia de otros lenguajes, la parte condicional de la declaración if en Shell Script debe estar separada por punto y coma.
[] en la tercera línea indica pruebas condicionales. Las pruebas condicionales más utilizadas incluyen las siguientes:
[ -f "$file" ] Determina si $file es un archivo
[ $a. -lt 3 ] Determina si el valor de $a es menor que 3. De manera similar, -gt y -le representan mayor o menor o igual a
[ -x "$file" ] Determina si $ El archivo existe y está disponible el permiso de ejecución, también -r prueba la legibilidad del archivo
[ -n "$a" ] para determinar si la variable $a tiene un valor, prueba la cadena vacía con -z
.[ "$ a" = "$b" ] Determinar si los valores de $a y $b son iguales
[ cond1 -a cond2 ] Determinar si cond1 y cond2 son verdaderos al mismo tiempo, -o significa que uno de cond1 y cond2 es verdadero
[ cond1 -a cond2 ] p>
Preste atención a los espacios en la sección de prueba condicional. Hay espacios a ambos lados de los corchetes, así como espacios a ambos lados de -f, -lt, = y otros símbolos. Sin estos espacios, se producirá un error cuando Shell interprete el script.
$# representa el número de parámetros de la línea de comando, incluido $0. En el shell, el nombre del script en sí es $0 y el resto son $0, $1, $2..., ${10}, ${11}, etc. $* representa la lista completa de parámetros, excluyendo $0, lo que significa que la lista de parámetros no incluye el nombre del archivo.
Ahora entendemos que el significado de la tercera línea es que si el archivo de script tiene menos de tres parámetros, se ejecutará el contenido entre las declaraciones if y fi. Luego, el contenido entre la cuarta y la undécima línea se denomina documento Here en la programación de Shell Script. El documento Here se utiliza para pasar varias líneas de texto a un determinado comando. El formato del documento Here comienza con lt;lt;, seguido de una cadena. Cuando finalice el documento Here, también aparecerá esta cadena, indicando el final del documento. En este ejemplo, el documento Aquí se envía al comando cat, lo que significa que el contenido del documento se imprime en la pantalla para mostrar información de ayuda.
La salida en la línea 12 es un comando de Linux, lo que significa salir del proceso actual. Todos los comandos de Linux se pueden usar en scripts de Shell, usando el cat y exit anteriores. Por un lado, el uso competente de los comandos de Linux también puede reducir en gran medida la longitud de los scripts de Shell.
Las oraciones decimocuarta y decimoquinta son declaraciones de asignación, que asignan el primer y segundo parámetro a las variables ANTIGUO y NUEVO respectivamente. Las siguientes dos oraciones son comentarios. La función de los dos cambios debajo de los comentarios es eliminar el primer y segundo parámetro en la lista de parámetros, y los parámetros posteriores se convierten en el nuevo primer y segundo parámetro. La lista originalmente tampoco incluía $0.
Entonces, desde la línea 21 hasta la línea 31 hay una declaración de bucle. Los bucles en Shell Script tienen los siguientes formatos:
mientras [ cond1 ] amp; { || } [ cond2 ] …;
para var en…; hacer
…
hecho
para (( cond1; cond2; cond3 )) hacer
…
hecho
hasta que [ cond1 ] amp; { || } [ cond2 ] …;
hecho
En los bucles anteriores, también puede utilizar declaraciones break y continue similares al lenguaje C para interrumpir la operación del bucle actual. El bucle en la línea 21 coloca los parámetros de la lista de parámetros en el archivo de variables uno por uno. Luego ingrese un bucle para determinar si el archivo es un archivo. Si es un archivo, use el comando sed para buscar y generar un nuevo nombre de archivo.
Básicamente, Sed puede verse como un programa de búsqueda y reemplazo que lee texto de una entrada estándar, como una tubería, y envía los resultados a la salida estándar. Sed utiliza expresiones regulares para buscar. En la línea 23, la función de la comilla invertida (`) es sacar el resultado de salida del comando entre dos comillas invertidas. Aquí, es sacar el resultado y asignarlo a la variable nuevo archivo. Luego, determine si el archivo nuevo ya existe; de lo contrario, cambie el archivo a archivo nuevo. De esta manera entendemos el papel de este script. Otros scripts escritos por Shell Script son similares a este, excepto que la sintaxis y el uso son ligeramente diferentes.
A través de este ejemplo, entendemos las reglas para escribir Shell Script, pero aún quedan algunas cosas por decir.
Primero, además de las declaraciones if, Shell Script también tiene declaraciones de caso similares a la estructura de múltiples ramas en el lenguaje C. Su sintaxis es:
case var in
.patrón 1)
…;;
patrón 2)
…;;
*)
… ;;
esac
Tomemos el siguiente ejemplo para ver cómo se usa la declaración case.
mientras getopts vc: OPCIÓN
hacer
caso $OPCIÓN en
c) COPIES=$OPTARG
ehco "$COPIES";;
v) echo "suyang";;
\?) salida 1;;
esac
hecho
El getopts anterior es similar a la función getopts proporcionada por el lenguaje C. En Shell Script, getopts se usa a menudo junto con la instrucción while. La sintaxis de getopts es la siguiente:
variable getopts option_string
option_string contiene una cadena de opciones de un solo carácter. Si getopts encuentra un guión en el parámetro de la línea de comando, agregará el. guión después del guión. Los caracteres se comparan con option_string. Si la coincidencia es exitosa, el valor de la variable se establece en la opción. Si no hay coincidencia, el valor de la variable se establece en? . A veces, la opción también lleva un valor, como -c5, etc. En este caso, se deben agregar dos puntos después de la letra de la opción en option_string. Después de que getopts encuentre los dos puntos, leerá el valor y luego colocará el valor en el. variable especial OPTARG medio. Este comando es relativamente complejo. Si es necesario, los lectores pueden consultar la información relevante escrita por Shell para obtener más detalles.
La función del bucle anterior es sacar las opciones después del nombre del script y procesarlas. Si se ingresa una opción ilegal, ingrese a la sección especificada por "? y salga del programa de script.
Capítulo Segundo, Bash proporciona una selección extendida para aplicaciones interactivas, donde el usuario puede seleccionar entre un conjunto diferente de valores.
La sintaxis es la siguiente:
select var in...; do
break;
done
Por ejemplo, la salida. del siguiente programa es:
#!/bin/bash
echo "¿Tu elección?"
selecciona var en "a" "b" "c "; hacer
p>romper
hecho
echo $var
------------ ------ ----------
¿Tu elección?
1) a
2) b
3) c
En tercer lugar, también puede utilizar funciones personalizadas en Shell Script. La sintaxis es la siguiente:
nombredefunción()
{<. /p>
…
}
Por ejemplo, podemos colocar las líneas cuarta a duodécima del segundo ejemplo anterior en el cuerpo de una función llamada ayuda y escribir directamente cada vez que se llame en el futuro Solo ayuda. La forma de manejar los parámetros de llamada a función en una función es usar directamente $1 y $2 mencionados anteriormente para representar el primer y segundo parámetro respectivamente, y usar $* para representar la lista de parámetros.
En cuarto lugar, también podemos depurar el script de Shell en Shell. Por supuesto, la forma más sencilla es utilizar la salida de eco para comprobar el valor de la variable. Bash también proporciona un método de depuración real, que consiste en utilizar el parámetro -x al ejecutar el script.
sh ?x filename.sh
Esto ejecutará el script y mostrará los valores de todas las variables en el script. También puede usar el parámetro -n, que. no ejecuta el script, pero devuelve todos los errores de sintaxis.