Shell Linux
-
Upload
ivan-de-la-rosa -
Category
Documents
-
view
30 -
download
0
Transcript of Shell Linux
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 1/15
José NaveroEsta Documento trata de la programación enShell Script desde un nivel básico.
Apuntes de Unix
Shell Script.
http://www.namocode.com http://devthisblog.wordpress.com/
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 2/15
http://www.namocode.com http://devthisblog.wordpress
2
Índice
1. Una pequeña introducción. ................................................................................. 3 2. Que necesitamos para escribir un Shell script. .................................................... 3 3. Ejecutando un Shell Script. ................................................................................. 3 4. Nuestro primer Shell Script. ............................................................................... 3 5. Algunos conceptos básicos. ................................................................................ 3
Sobre comandos: ....................................................................................................... 3 Comentarios: ............................................................................................................. 4 Salida por pantalla: .................................................................................................... 4
6. Variables. ........................................................................................................... 4 El comando Export .................................................................................................... 4 El comando set .......................................................................................................... 4
Variables posicionales y automáticas ......................................................................... 4 Arrays ........................................................................................................................ 5
7. Salida por pantalla y entrecomillado. .................................................................. 5 Caracteres no imprimibles ......................................................................................... 5 Entrecomillar ............................................................................................................. 6 Ejecución de órdenes ................................................................................................. 6 Redireccionamiento ................................................................................................... 6 Segundo plano ........................................................................................................... 7
8. Shell Script, El lenguaje. .................................................................................... 7 Estructuras de control ................................................................................................ 7
La instrucción IF. ................................................................................................... 8 La instrucción CASE. ............................................................................................. 9
Bucles ........................................................................................................................ 9 Bucle WHILE ......................................................................................................... 9 Bucle UNTIL ....................................................................................................... 10 Bucle FOR............................................................................................................ 10
Pequeña reflexión. ................................................................................................... 10 Varios comandos… ................................................................................................. 11
Comando test ........................................................................................................ 11 Comando break .................................................................................................... 11 Comando continue ................................................................................................ 12 Comando sleep ..................................................................................................... 12 Comando expr ...................................................................................................... 12
Anexo I. Ejemplos ...................................................................................................... 13
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 3/15
http://www.namocode.com http://devthisblog.wordpress
3
1. Una pequeña introducción.
Este escrito da por supuesto el conocimiento de los comandos de Unix / Linux. LosScript de Shell es una forma de realizar tareas repetitivas, ejecución de comandos Unixy como veremos a continuación la programación en Shell script es muy potente. Para
este manual he utilizado sco Unix y el Shell ksh. Al igual que ksh existen diferentesshells. Una Shell es un intérprete de comandos en nuestro caso en Unix / Linux. El másutilizado (por mi parte en Ubuntu es el bash). Como ya he indicado antes este manual lohe orientado a sco unix y ksh (Korn Shell) aunque sirve para cualquier otro shell.
2. Que necesitamos para escribir un Shell script.
Básicamente, necesitamos un Shell como los descritos anteriormente (obviamente),tener un Linux instalado, un unix, live cd etc. Y para escribir el script necesitamos uneditor, como el nano, el vim, el vi o lo que más nos guste, el caso es que edite.
3. Ejecutando un Shell Script.
Una vez que tenemos nuestro script escrito, podemos ejecutarlo de diferentesformas.
Mediante un redireccionamiento de entrada. ejemplo: ksh < fichero Pasando el fichero como argumento. ejemplo: ksh fichero argumento 1 arg2 ...
Si ponemos ksh -x fichero, hace una traza comprobando que funcione bien Convertir el fichero en un ejecutable con la orden chmod.
4. Nuestro primer Shell Script.
Para hacer nuestro primer script de Shell, debemos crear un archivo con un editor detexto (ejemplo vi).
#!/bin/kshecho “Hola que tal estas”
¿Qué hace este script?
La primera línea indica el Shell que se va a utilizar en nuestro caso el ksh, la segundalínea muestra por pantalla la frase “Hola que tal estas”
5. Algunos conceptos básicos.
Sobre comandos:
Es importante destacar que Unix es case sensitive, es decir diferencia mayúsculas yminúsculas, es decir no es lo mismo echo que Echo
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 4/15
http://www.namocode.com http://devthisblog.wordpress
4
Comentarios:
Si deseamos poner comentarios en nuestro script debemos usar la almohadilla
#Esto es un comentario en un script de Shell.
Salida por pantalla:Como hemos visto en nuestro primer script, es posible mostrar por pantalla textos o
variables con la orden echo.
6. Variables.
Para utilizar una variable basta con hacer una asignación como vemos acontinuación.
variable = “valor”
Esta orden establece un valor en una variable.Si deseamos mostrar el contenido de una variable utilizaremos la orden
echo $variable
Si deseamos introducir un dato a una variable desde el teclado, utilizamos la orden readseguido de la variable.
read variable
Si además deseamos introducir un texto antes de leer la variable usamos read de la
siguiente forma:read variable? “texto”
El comando Export
export imprime en pantalla una lista de variables exportadas. Si deseamosexportar una variable, utilizamos “export variable” (sin comillas).
El comando set
Este comando “set” Sirve para leer o escribir variables.
Variables posicionales y automáticas
Existen variables que son activadas por el Shell de forma automática, estasvariables tienen gran importancia por su utilidad a la hora de crear nuestros scripts. En lasiguiente tabla veremos dichas variables.
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 5/15
http://www.namocode.com http://devthisblog.wordpress
5
Variable Descripción$? Variable que indica el código de retorno del script. Retorna 0 si se ha
ejecutado con éxito y distinto de 0 si ha habido un error.$$ Variable que almacena el pid del procedo de ejecución del script.$! Variable que contiene el número de identificación del último proceso en
background.$1, $2 …$9, ${10}…
Variables posicionales. Son las variables que le pasamos por línea decomandos a nuestro script de Shell. Nota, desde la posición 10 en adelantedeben llevar llaves {}
$# Variable que contiene el número total de parámetros que se le pasan al script.$* Variable que crea una cadena de texto con todas las variables pasadas.
Arrays
Además de las variables normales, posicionales y automáticas, podemos creararrays. Dichos arrays se definen de la siguiente forma:set -A nombre valor1 valor2 ...... valorn
Para mostrar la tercera posición de un array, utilizamos el comando:echo ${nombre[3]}
Por último si deseamos ver el array completo basta con teclear echo ${nombre[*]}
7. Salida por pantalla y entrecomillado.
Como ya sabemos, la orden echo muestra por pantalla los textos o variables quedeseemos. Podemos darle formato a esta salida, todo depende del entrecomillado y delos caracteres no imprimibles como vemos a continuación.
Caracteres no imprimibles
Estos caracteres son: \n Introduce un salto de línea en la frase \c Continúa en la misma línea.
\e Carácter Escape. \t Escribe un tabulador.
Ejemplo:echo “Hola \ n Me llamo Juan”
La salida de este comando es la siguiente:HolaMe llamo Juan
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 6/15
http://www.namocode.com http://devthisblog.wordpress
6
Entrecomillar
Es muy importante entrecomillar correctamente los textos y las variables ya quedepende del entrecomillado la forma en que vamos a mostrar o utilizar nuestrasvariables.
Existen diferentes formas de entrecomillar. Al teclear comillas simples „‟, todo loque va entre estas comillas pierde su significado, pasando a ser todo texto.
Sin Embargo, las comillas dobles “” podemos mostrar los valores que contienen lasvariables.
Otra forma de entrecomillar es utilizar la barra inversa \ con esta barra podemoscubrir caracteres no imprimibles. De esta forma podremos mostrar comillas, porejemplo.
Además de poder entrecomillar podemos utilizar los paréntesis para poder agrupardiferentes ordenes.
Ejemplos:
Orden Resultadoecho * Muestra los archivos (funciona igual que cuando ponemos ls)echo \* Muestra el carácter * por pantallavariable = 1echo „Prueba variable‟
Muestra por pantalla prueba variable
variable = 1echo “variable”
Muestra por pantalla 1
Ejecución de órdenes
Existen varias formas de ejecutar las diferentes órdenes en Shell Script.Punto y coma: Se utiliza para ejecutar una orden después de otra. orden1;orden2Or(||): Ejecuta las dos órdenes al mismo tiempo. orden1||orden2
And (&&): Se ejecuta la segunda orden si la primera se ha ejecutado con éxito.
Redireccionamiento
Una vez que ejecutemos una orden, tenemos la posibilidad de enviar el resultado a
un dispositivo diferente de la pantalla. Por ejemplo, podemos enviar el resultado a unarchivo.Ejemplos:
pwd;date > resulEn este caso, primero ejecuta el comando pwd y posteriormente crea el archivo
resul donde insertará el resultado de ejecutar date.(pwd;date) > resulEstá orden similar a la anterior la diferencia (los paréntesis) en vez de introducir el
resultado de date insertará el resultado de ejecutar ambas ordenes.Como podemos ver con el símbolo mayor que realizamos los redireccionamientos.
Si ponemos un único símbolo borra el fichero si existe y lo crea nuevo. Sin embargo al
poner dos mayor que seguidos (>>) El resultado que tenemos es que si el fichero no
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 7/15
http://www.namocode.com http://devthisblog.wordpress
7
existe se crea y si existe, anexa el resultado en el fichero. Por otro lado además derecoger los resultados, también podemos redireccionar los errores de la siguiente forma:
Pwd > resul 2 > error En este ejemplo almacenamos en el fichero resul el resultado de ejecutar el
comando y si se produce un error, dicho error se almacena en el fichero error.
Segundo plano
Unix / Linux nos ofrece la posibilidad de ejecutar órdenes y enviarlas a segundoplano, es decir, mientras se ejecuta una orden podemos seguir ejecutando otras órdenes.
Esto combinado con los paréntesis o creando un Script de Shell nos permite realizaroperaciones muy potentes. Para poder enviar una orden a segundo plano usamos el &.
Ejemplos:orden1;orden2&
En este ejemplo, se ejecuta la primera orden y después la siguiente orden la ejecutaen segundo plano.(orden1;orden2)&En el segundo ejemplo, las dos órdenes se ejecutarán en segundo planoBásicamente, para poder trabajar con los comandos en primer y segundo plano se
usan 3 comandos.Jobs: Muestra los comandos que están en ejecuciónFg: pasa a primer plano un comandoBg: pasa a segundo plano un comandoSi pulsamos control+z durante la ejecución de una orden, dicha orden se detiene y
podemos pasarla a segundo plano con bg o primer plano con fg. Mientras que con jobs
muestra las ordenes que están en proceso.
8. Shell Script, El lenguaje.
Shell Script tiene la misma funcionalidad que cualquier lenguaje de programación,además, de la potencia de un lenguaje de programación, podemos utilizar cualquiercomando que pueda usar Linux/Unix, lo que nos da una gran potencia.
Estructuras de control
Son estructuras que permiten ejecutar entre un bloque u otro, en base a unacondición previamente indicada.
Las estructuras posibles en Shell script son las siguientes if y case que veremos acontinuación.
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 8/15
http://www.namocode.com http://devthisblog.wordpress
8
La instrucción IF.
Se encarga de elegir ente dos o más bloques, en el diagrama podemos verclaramente el funcionamiento de la instrucción.
Se cumpleBloque 1
Variable IF condición Resto del programaBloque 2
No se cumple
La sintaxis de la instrucción IF es la siguiente:
Para un if sencillo:
if <comando> thenBloque de instrucciones
fi
Para un if con dos bloquesif <comando> then
Bloque de instrucciones 1else
Bloque de instrucciones 2fi
Y por supuesto podemos anidar varios if, es decir, meter una instrucción if dentrode otro.
if<comando> thenBloque de instrucciones 1
elseif<comando> then
Bloque de instrucciones 2else
Bloque de instrucciones 3fifi
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 9/15
http://www.namocode.com http://devthisblog.wordpress
9
La instrucción CASE.
Esta instrucción es una instrucción similar al if, es decir secuencia de control. Elsiguiente diagrama muestra el funcionamiento de esta instrucción.
Si variable
Vale X Bloque 1
Vale Y Bloque 2 Resto del programa
Vale Z Bloque 3
La sintaxis de esta instrucción es la siguiente:
case variable/expresión in1) Orden1
Orden2…;;
[2-4]) Orden1Orden2….;;
*) Orden1Orden2…;
esac
Analizando el comando anterior, podríamos decir, si la variable es igual que uno,ejecuta el primer bloque. Para salir del bloque se ponen dos puntos y comas seguidoscomo se pueden ver.
Si nos fijamos en el segundo bloque, hace referencia a un rango es decir, si lavariable o expresión está dentro del rango ósea puede ser el valor 2, 3 o 4.Por último el asterisco, indica que si no es ninguna de las opciones anteriores entra subloque.
Como en todos los comandos, esac indica el final del comando case.
Bucles
Los bucles, como en cualquier lenguaje de programación sirven para repetirbloques de comandos.
Bucle WHILE
Realiza un bucle mientras se cumpla una condición determinada.La sentencia del bucle es la siguiente:
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 10/15
http://www.namocode.com http://devthisblog.wordpress
10
while comandodo
Orden1Orden2…
done
Mientras se cumpla repetir.
Bucle UNTIL
Realiza un bucle hasta que se cumpla una condición determinada.La sentencia del bucle es la siguiente:
until comando
do Orden1Orden2…
done
Bucle FOR
Realiza una iteración un número determinado de veces,La sentencia del bucle es la siguiente:
for variable in valor1 valor2 valorn… do
Orden1Orden2…
done
A continuación se muestra un ejemplo del uso del bucle for.
for a in lunes martes miércoles jueves
doecho $a
done
Este ejemplo muestra por pantalla la siguiente línea:Lunes martes miércoles jueves
Pequeña reflexión.
Hasta aquí todo perfecto, pero ahora ¿Qué comandos uso en las evaluaciones?
¿Cómo utilizo todo esto?.
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 11/15
http://www.namocode.com http://devthisblog.wordpress
11
A continuación iré mostrando los comandos más comunes, así como algunos ejemplosde Shell script.
Varios comandos…
Comando test
Este comando es el comando evaluador más utilizado en los bucles o sentenciasde control. Puede trabajar sobre valores numéricos, ficheros o cadenas de texto.
Uso sobre valores numéricos.
-eq: igual-ne: distinto
-gt: mayor queOperadores -lt: menor que-ge: mayor o igual que-le: menor o igual que
Este tipo de operadores, solamente admite números enteros positivos y negativos.
Uso sobre ficheros.
-s: comprueba que existe y no está vacio
-e: solo comprueba si existe-f: comprueba si es un fichero convencionalOperadores -d: comprueba si es un directorio
-w: comprueba si tiene permiso de escritura-r: comprueba si tiene permiso de lectura-x: comprueba si tiene permiso de ejecución.
Uso sobre cadenas.
-z: indica si la cadena tiene longitud cero
Operadores -n: Indica si la cadena no tiene longitud cero.
Comando break
Con este comando podemos interrumpir una secuencia de control como puedeser un bucle, si se produce una acción concreta podemos indicar que deje de ejecutar el
bucle “rompiéndolo” para continuar con la ejecución del script.
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 12/15
http://www.namocode.com http://devthisblog.wordpress
12
Comando continue
Este comando, forzamos a un bucle a que realice otra iteración, sin que acabe derealizar todos los comandos o evaluadores que sean posteriores.
Comando sleep
Este comando realiza una pausa de uno a varios segundos en función del tiempoindicado. La sintaxis es la siguiente: sleep 2 (realiza una pausa de 2 segundos).
Comando expr
Este comando realiza una operación básica entre dos variables o más. Unejemplo de su uso podría ser este: a= expr $a + 1
Para ver más información sobre algunos script en el Anexo I adjunto varios ejemplos descript donde se puede ver el uso de los comandos, evaluadores, bucles etc.
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 13/15
http://www.namocode.com http://devthisblog.wordpress
13
Anexo I. Ejemplos
Ejemplo 1. Script “Hola mundo”
#!/bin/sh
echo “Hola Mundo”
Ejemplo 2. Script con una toma de decisiones
#!/bin/shclearecho “Introduzca un numero” read numerores= expr $numero % 2if test res – eq 0 ; then
echo “El numero es par” else
echo “El numero es impar” fiecho “Fin programa”
Ejemplo 3. Este script que reciba un directorio como primer parámetro, y a continuaciónuna lista de archivos. El script valida que los parámetros recibidos sean realmentearchivos y luego copiarlos al directorio recibido
#!/bin/shif test $# -le 1; then
echo “Argumentos no validos” exit
fi
if test – d $1; thencarpeta=$1for I in $*;do
if test – f $i; thencp $i $carpetaecho “Archivo $i copiado en $carpeta”
fidone
elseecho “Argumento no valido”
fi
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 14/15
http://www.namocode.com http://devthisblog.wordpress
14
Ejemplo 4. Este script muestra un menú con los nombres de login de los usuariosconectados y al elegir uno se nos muestre el nombre completo del mismo así como su laruta de su directorio personal.
#!/bin/shclearusuario=''echo "--------------- MENU USUARIOS -----------------"echo "-----------------------------------------------"who -s | cut -f1,2 -d ' ' | cut -f1,1 -d ' '|nlecho "-----------------------------------------------"echoecho "Escribe el nombre de uno de los usuarios logados en el sistema"echo "para ver su alias y la ruta de su carpeta personal."echo "Si ves algun usuario repetido es porque estas usando una"
echo "terminal de comandos con ese usuario."echoecho -n "Usuario :"read usuario
if [ -z $usuario ]; thenechoecho "No se ha introducido ningun dato"echo
elsenombreu=$(grep ^$usuario /etc/passwd | cut -d ":" -f5 | cut -d "," -f1)
homeu=$(grep ^$usuario /etc/passwd | cut -d ":" -f6 | cut -d "," -f1)if [ -z $nombreu ]; then
echoecho "El nombre de usuario indicado no existe"echo
elseecho "El nombre del usuario indicado es :" $nombreuecho "El directorio personal es :" $homeuechoecho -n "Pusla una tecla para continuar..."read enterKeyecho
fifi
Ejemplo 5. script que muestra un menú con las siguientes opciones:
a. Visualizar atributos del directorio actual.b. Visualizar directorio actualc. Mostrar el contenido de un fichero
d. Salir
5/7/2018 Shell Linux - slidepdf.com
http://slidepdf.com/reader/full/shell-linux-559abac93fbdc 15/15
http://www.namocode.com http://devthisblog.wordpress
15
#!/bin/bash#Inicio del script.while :do
clear
opcion=0echo "-------------MENU PRINCIPAL--------------------"echo "-----------------------------------------------"echo "a. Visualizar atributos del directorio actual"echo "b. Visualizar directorio actual"echo "c. Mostrar el contenido de un fichero"echo "d. Salir"echo "-----------------------------------------------"echoecho -n "Elige una opcion: "read opcion
case $opcion ina)clear
echo "Mostrando los atributos del directorio actual"ls -l .
read enterkey;;
b)clear
echo "Mostrando el contenido del directorio actual"ls
read enterkey;;
c)clear
echo -n "Indica el nombre de un fichero: "read ficheroif test -f $fichero; then
cat $ficherofi
read enterkey;;d)
exit;;
*)clear
echo "La opcion $opcion no esta en la lista"read enterkey
;;esac
done