1 - Linux-Programacion Shell
Short Description
Download 1 - Linux-Programacion Shell...
Description
Tema: Programación Shell 1. INTERPRE INTERPRETE TE DE COMANDOS: COMANDOS: progr program amaa que que se enca encarg rgaa de aten atender der toda todass las las peticiones del usuario; existen varios interpretes de comandos: a. BOURNE BOURNE SHELL SHELL (sh): (sh): más más antigu antiguo o y más más extendido extendido.. b. KORN SHELL SHELL (ksh): (ksh): proporciona proporciona algunas algunas caracterís característica ticass adicionales adicionales.. c. C SHELL SHELL (csh): (csh): diferen diferencias cias de vocabul vocabulario ario y sintaxis sintaxis con respec respecto to a (sh) d. BOURNE BOURNE AGAIN SHELL: SHELL: todo todo lo de (sh); (sh); incorpora incorpora (ksh) (ksh) y (csh); (csh); uno uno de los más utilizados en al actualidad. Se puede trabajar de varias formas con un shell; Interactivamente Proporcionando pequeños programas llamados “scripts”. “scripts”. 2. CREACIÓN CREACIÓN DE SCRIPTS. SCRIPTS. DEFINICI DEFINICIÓN: ÓN: UN scri script ptss es un fich fichero ero de text texto o que que contiene secuencias de comandos y nombres de programas que pueden ser ejecutados, se pueden crear con cualquier editor de textos. Ejemplo: #cat echo echo echo who echo pwd echo
script_1 “este es mi primer script” “los usuarios conectados al sistema son:” “mi directorio actual es: “ “fin de primer script”
3. EJECUCIÓN DE UN SHELLSCRIPT: existen varias formas en la que podemos ejecutar un script: a. Invoca Invocarr al intérpr intérprete ete de comando comandoss y pasarl pasarlee como parámet parámetro ro el scrip scriptt que se desea ejecutar. Ejemplo: #bash mi.primer.script - no tiene que tener permiso de ejecución - se crea un shell hijo del shell actual
b. Directamen Directamente te el nombre nombre del del script script en en en prompt. prompt. Ejemplo: Ejemplo: #chmod u+x mi.primer.sc mi.primer.script ript #mi.primer.script #PATH=`echo $PATH`:/directorio.de.script - es necesario que tenga permiso de ejecución - se crea un shell hijo del shell actual
c. Utilizand Utilizando o el “.” “.” Delant Delantee del nombre nombre del script script.. Ejemplo: Ejemplo: #. mi.primer.script mi.primer.script permiso de ejecución ejecución - No necesita tener permiso - Se ejecuta en el mismo shell
d. Util Utiliz izan ando do el el com coman ando do exec delante del nombre del script #exec nombre.shell.script
145687376.doc
- Necesita permiso de ejecución - Se ejecuta en el shell actual - Nos saca del terminal
4. VARIABLES Y PARÁMETROS: al hablar de variables y parámetros, podemos hacer la siguiente subdivisión: a. VARIABLES DE USUARIO b. PARÁMETROS i. PARÁMETROS POSICIONALES ii. PARÁMETROS DE PALABRA CLAVE c. VARIABLES DE SISTEMA i. VARIABLES PREDETERMINADAS ii. VARIABLES INTERNAS 5. VARIABLES DE USUARIO: son las definidas por el usuario, para los nombres, las características son: a. características de los nombres i. Alfabéticos (mayúsculas/minúsculas) ii. Números iii. Subrayado iv. Hay diferencia entre mayúsculas y minúsculas v. El nombre no puede empezar por un número vi. Las variables pueden almacenar cadenas de texto vii. Los números se almacenan como cadenas de texto viii. acceso al contenido de la variable, se antepone el símbolo “$” al nombre de la variable #echo $PATH #echo PATH
sacaría por pantalla el valor de PATH sacará por pantalla la palabra PATH
b. asignación directa, mediante el signo “=”. Ejemplo: #variable=33 #variable=cadena #variable=” ... hasta pronto..
“
c. asignación por teclado, para asignar un valor a una variable mediante teclado utilizamos el comando “read”. Ejemplo: #read NOM #echo $NOM
d. Atributos de una variable: i. export: el valor de la variable sólo es conocido por el shell en el que se le asigna. Si deseamos que el valor sea conocido por otros shell hijos tendremos que utilizar el comando anterior. Ejemplo #export variable cat exportacion A=33 echo “el valor de A es $A” echo “Introduzca el nombre de un país” read PAIS echo "El valor de la variable país es $PAIS” bash exportal #Llamada a otro subshells o shell hijo echo "He regresado del shell. exportal"
145687376.doc
echo "El valor de A después de la modificación es $A" cat exporta1 echo "se está ejecutando el shell exportal" echo "El valor de A en exportal es $A' A=cambio echo "El valor de A en exportal es $A”
ii. readonly: marca una variable para que su valor no se pueda modificar. 1. Persiste hasta que salgamos del SHELL 2. Si se utiliza en línea de comandos persiste hasta que salgamos a “login”. Ejemplo:
#readonly MEJOREQUIPO
6. PARÁMETROS: los scripts pueden recibir argumentos desde la línea de comandos, es lo que denominamos parámetros posicionales. Para hacer referencia a un parámetro dentro de un script se utiliza el carácter “$” seguido del número que indica la posición del parámetro en la línea de comandos.
Ejemplo:
i. ii. iii. iv. v. vi. vii.
$0 $1 … $9 $# $* $@
hace referencia al nombre del script hace referencia al primer argumento. hace referencia al argumento que ocupa el noveno lugar. nº de parámetros EXCLUYENDO el $0 todos los parámetros EXCLUYENDO el $0 todos los parámetros INCLUYENDO EL $0
#script.para pepe 3 hola 34 echo echo echo echo
“El “El “El “El
primer parámetro posicional es …$1” segundo parámetro posicional es …$2” tercer parámetro posicional es …$3” cuarto parámetro posicional es …$4”
a. Comando set: entre otras cosas sirve para almacenar valores en las variables posicionales. Ejemplo:
#cat set1 echo “El valor echo “El valor echo “El valor set `date` echo “El valor echo “El valor echo “El valor set 33 “es una echo “El valor echo “El valor echo “El valor
de \$1 es: $1” de \$2 es: $2” de \$3 es: $3” de \$1 es: $1” de \$2 es: $2” de \$3 es: $3” cadena” fin de \$1 es: $1” de \$2 es: $2” de \$3 es: $3”
#set1 juan pedro ana
b. Comando shift: hace una translación de n posiciones en la asignación de parámetros por posición.
#cat sft echo “El echo “El echo “El shift 3 echo “El echo “El echo “El #sft 1 2
valor de \$1 es: $1” valor de \$2 es: $2” valor de \$3 es: $3” valor valor valor 3 4 5
145687376.doc
de \$1 es: $1” de \$2 es: $2” de \$3 es: $3” 6
Ejercicio: crear un script llamado “mis.lineas”, al que se le pase como parámetro el nombre de un fichero y el número de líneas que queremos visualizar de dicho fichero. 7. VARIABLES DEL SISTEMA. a. VARIABLES PREDETERMINADAS: algunas variables tienen un significado especial para el shell. Ejemplo: HOME, PATH. b. VARIABLES INTERNAS: son variables a las que el sistema les asigna, directamente, los valores. Ejemplo: i. $? Código de ejecución del último comando ejecutado, 0 ejecutado correctamente. ii. $# nº de parámetros EXCLUYENDO el $0 iii. $* todos los parámetros EXCLUYENDO el $0 iv. $$ contiene el PID del proceso en ejecución 8. ESTRUCTURAS DE PROGRAMACIÓN: a. EJECUCIÓN CONDICIONAL DE COMANDOS i. comando1 && comando2 ->se ejecuta comando2 si está correcta la ejecución de comando1. ii. comando1 || comando2 comando1
->se ejecuta comando2 si hay un error en
#ls fich1 && cat fich1 #ls fich1 || echo “ el fichero no existe”
9.
EXPRESIONES: el comando expr evalúa los argumentos considerándolos como una expresión; escribe el resultado sobre la salida estándar. Sólo permite trabajar con enteros. a. expr variable operador variable [operador variable] i. + -> suma ii. -> resta iii. * -> producto, precedido de “\” para que no asigne el valor que tiene para el shell. iv. / -> división v. % -> resto. b. Comandos para trabajar con cadenas: i. substr cadena i j crea una subcadena de longitud j a partir de la posición i, incluida. Ej.
expr Substr “$CADENA” 2 4 ii. length cadena devuelve la longitud de cadena expr length “$CADENA”
iii. index cadena carácter .. devuelve la posición de la primera aparición de carácter en cadena. Si se ponen varios caracteres, devuelve la posición de aquel que aparezca en primera posición.
Ejercicio: crear un script llamado “operaciones” al que le pasaremos como parámetros 2 valores numéricos, así mismo nos debe solicitar por teclado el tipo de operación a realizar con los números. 10. COMANDO “TEST”: sirve para evaluar expresiones lógicas, chequear tipos de ficheros, compara cadenas, compara enteros, etc.
145687376.doc
a. Formato: test expresión . Test evalua la expresión y si el valor es cierto retorna un código de estado 0, en caso contrario, retorna un estado distinto de 0. b. Opciones de comprobación de ficheros: i. –e existe ii. –b fichero especial de bloques iii. –c fichero especial de caracteres. iv. –d directorio v. –f fichero ordinario vi. –s tamaño mayor que 0 bytes vii. –w permiso de escritura viii. –x permiso de ejecución ix. –h enlace simbólico #test –e fich1 ; echo $?
c. Operaciones con cadenas: i. ii. iii. iv.
–z cadena -> verdadero si longitud de cadena es igual a 0 –n cadena -> verdadero si longitud de cadena es distinto de 0 cad1 = cad2 -> verdadero si las cadenas son iguales. cad1 != cad2 -> verdadero si las cadenas distintas.
d. Operaciones con enteros: i. –eq -> iguales ii. –ne -> distintos iii. –le -> menor o igual iv. –lt -> menor v. –ge -> mayor o igual vi. –gt -> mayor e. operadores lógicos: i. ! expresión -> cierto si la expresión es falsa. ii. –a -> and iii. –o -> or 11. ESTRUCTURA if: la estructura de control examina el estado que devuelve la expresión y si es cero ejecuta las órdenes que siguen al then, en caso contrario, ejecutas órdenes que siguen a else. a. El formato de la estructura es la siguiente: if expresión if expresión then
then
comandos
comandos fi
else comandos fi
Ejercicio: crear un script, llamado “mis.lineas.completo”, al que se le pase como parámetro el nombre de un fichero y el número de líneas que queremos visualizar de dicho fichero. Se debe mejorar el script, mis.lineas, para que tenga en cuenta que el fichero existe y que efectivamente le hemos pasado 2 parámetros al script. Ejercicio: crear un script, llamado “resta.si”, que pida 2 números por teclado, si el primero es mayor que el segundo los restamos; en caso contrario, mostrar un mensaje indicando que no se pueden restar.
145687376.doc
Ejemplo: crear un script llamado “renom” que permita renombrar ficheros. Se debe comprobar que se le pasan 2 parámetros, que el primer parámetro sea un fichero normal que exista y que el segundo nombre sea un fichero que no exista. Visualizar los mensajes de error oportunos. if test –f $1 –a –e $1 then if test –e $2 then echo “error el fichero $2 ya existe” else mv $1 $2 fi else echo “El fichero no es normal o no existe” fi
12. ESTRUCTURA case: permite tomar una decisión entre múltiples casos: a. El formato de la estructura es la siguiente: case variable in patron1) comando1 comando2;; patron2|patron3) comando3;; *) comandos por defecto (opcional) esac 13. ESTRUCTURA while: cuando la condición devuelve un estado de cierto, se sigue ejecutando la serie de mandatos delimitada por las instruccines “do” y “done”. Antes de cada ciclo, la estructura prueba la condición a. El formato de la estructura es el siguiente: while condición do comando1 comando2… done 14. ESTRUCTURA until: cuando la condición devuelve un estado de falso, se sigue ejecutando la serie de mandatos delimitada por las instruccines “do” y “done”. Antes de cada ciclo, la estructura prueba la condición. until condición do comando1 comando2… done
Ejemplo: mostrar los números del 1 al 10 por pantalla. contador=1 incremento=1 until test $contador –eq 11
145687376.doc
do echo $contador contador=`expr $contador + $incremento` done
15. ESTRUCTURA for: permite realizar la repetición múltiple de la serie de comandos que están dentro de la misma. a. El formato de la estructura es el siguiente: for variable in lista_de_valores do comando1 comando2… done Ejemplo: mostrar los parámetros pasados. contador=1 for i in $* do echo “Parámetro $contador llamado $i” contador=`expr $contador + 1` done
Ejercicio: crear un script, llamado “veinte”, que procese los números del 1 al 20 y que muestre por pantalla el número, su cuadrado y su cubo. Ejercicio: crear un script, llamado “fichero.lineas”, que muestre por pantalla los nombres y el número de líneas que tiene cada fichero ordinario que se encuentre en el directorio actual de trabajo. La salida debe ser más o menos así Nombre de fichero:. . . . . Contiene: . . . . líneas Ejercicio: crear un script, llamado “grupo.usuarios”, que genere un listado con cada uno de los grupos que hay en el sistema y los usuarios que pertenecen a ese grupo como secundario. La salida debe ser: Nombre del grupo:. . . . . Usuarios: . . . . . . . Ejercicio: realizar un script, llamado “usuarios.sin”, que muestre por pantalla la lista de los usuarios que no tienen asignada contraseña. El segundo campo en el fichero /etc/passwd debe estar vacio. Ejercicio: realizar un script, llamado”bienvenida”, que de la bienvenida a cada uno de los usuarios conectados al sistema. La salida debe ser: Hola usuario1, bienvenido Hola usuario2, bienvenido Etc 16. ESTRUCTURA break: rompe la ejecución de un bucle y continúa la ejecución del programa en secuencia. Sólo se aplica a los comandos for, while, until, if. Ejemplo: fbreak while true do echo "estoy dentro del bucle" break done echo "el valor del codigo de error es $?"
145687376.doc
17. ESTRUCTURA exit: permite abandonar la ejecución de un shellscript en el momento que nosotros deseemos. Si lleva un número y está al final del programa, ese será el código que tendremos en $? Ejemplo: fexit while true do echo "estoy dentro del bucle" exit 2 done echo "El codigo de error es $?"
18. ESTRUCTURA continue: suspende la secuencia de ejecución y vuelve al principio del bucle. Sólo se utiliza con el comando “for”
Ejemplo: fcontinue for var in 1 2 3 4 do if test "$var" = "2" then echo "antes de ejecutar continue" continue echo "despues de ejecutar continue" else echo "el valor de var es $var" fi done
145687376.doc
View more...
Comments