Post on 12-Aug-2015
Scripts bajo la shell de Linux
Lina Mckoll Hernández
Qué es un script?
Un script es archivo ejecutable con una serie de ordenes que serán ejecutadas secuencialmente por un programa intérprete, que en este caso será la shell o interprete de comandos entre el usuario y el S.O
Cuál es el objetivo de in script?
Un script permite reunir una serie de comandos (utilidades) que podrían llegar a ser complicados incluyendo muchas opciones o parámetros y argumentos, presentándoselos al usuario como de una forma sencilla y de rápido acceso
Dónde crear un script?
Es necesario darle permisos de ejecución:
$ chmod +x your-script-name $ chmod 755 your-script-name
$ chmod ugo+x ejemplo.sh
syntax: $ bash your-script-name $ sh your-script-name $./your-script-name
Puede crearse en cualquier editor de texto plano, como vi u otro.
Cómo ejecutar un script?
Variables
Una variable es una asignación en memoria donde podemos guardar y reescribir cualquier tipo de dato. Hay variables definidas por el programador y otras que, por ser de uso muy común, ya están definidas en el sistema. Para retornar su valor necesitamos anteponer el signo $. No usar caracteres especiales(¿,*, etc) Case sensitive.
Escribiendo un script
Las variables se definen así: Syntax:
variable name=value #!/bin/sh # Ejemplo de uso de variables. VAR_1=Lina VAR_2=3 echo “Mi nombre es $VAR_1 y tengo $VAR_2 años"
Escribiendo un script
No es necesario declarar las variables del sitema, también llamadas variables de entorno.
Algunas de ellas son:
BASH, PWD, USER, UID
#!/bin/sh
# Ejemplo de uso de variables.
clear echo “Hola $USER , tu UID es $UID“ echo “El calendario de este mes es” cal exit 0
Uso de comillas
Comillas dobles: se usan para cadena de texto
Comilla inclinada: permiten ejecutar el contenido y que su resultado sea devuelto.
Comilla simple: permite ingnorar lo que esté dentro, depende del contexto puede ejecutar comandos
#!/bin/sh
# Ejemplo de uso de comillas
Clear
Yo=Lina Mckoll Hernández
echo “Feliz dia a todos, les desea $Yo“ echo “Hoy es ";date
Fecha=‘date’
Echo “Hoy es” $Fecha
Echo “El contenido de esta carpeta es ´ls ´”
Pidiendo datos al usuario
En ocasiones es muy importante guardar ciertos parámetros dados por el usuario, en el siguiente script vemos cómo hacerlo:
#!/bin/sh
# Script to print user information:
# who currently login , current date & time #
echo “Ingrese por favor un numero”
read num
echo “Usted es $USER y ha ingresado el número $num”
Aritmetica
Utilizar el comado expr #!/bin/sh # Ejemplo de uso de variables. expr 1 + 3 #suma expr 2 – 1 # resta expr 10 / 2 #division expr 20 % 3 #residuo expr 10 \* 3 #multiplicacion
Aritmética con variables
Utilizar el comado expr #!/bin/sh
# Ejemplo de uso de variables.
echo “expr 6 + 3” # muestra cadena de texto
echo `expr 6 + 3` # ejecuta la operación
VAR= `expr 6 + 3` # ejecuta la operación y guarda el resultado
#en VAR
VAR= `expr $NUM1 + 3` # ejecuta la operación, tomando uno de los #valores desde uma variables y guarda el resultado en VAR
Expresiones condicionales
Sentencia condicional if se utiliza para ejecutar unas u otras instrucciones, dependiendo de una condición. If [ condición es verdadera ] then hacer instrucciones else hacer otras instrucciones fi
Ejercicios: Scripts básicos para bash
Ejercicios: Scripts básicos para bash
Expresiones condicionales - IF
#!/bin/sh
# Script con condicional if #
echo “Ingrese un numero”
read num
echo “Usted es $USER y ha ingresado el número $num”
If [ $num –eq 10 ]
then
echo “usted ingreso el numero 10”
echo “usted tiene permiso para continuar”
else
echo “usted ingreso un numero diferente de 10”
echo “usted no tiene permiso para continuar”
fi
Ejercicios: Scripts básicos para bash
Expresiones para los condicionales
Comparaciones aritméticas
-lt <
-gt >
-le <=
-ge >=
-eq ==
-ne !=
#!/bin/bash # declare integers NUM1=2 NUM2=2 if [ $NUM1 -eq $NUM2 ] then echo "Both Values are equal" else echo "Values are NOT equal" fi
Expresiones para los condicionales
Comparaciones de cadenas
#!/bin/bash #Declare string S1 S1="Bash" #Declare string S2 S2="Scripting" if [ $S1 = $S2 ] then echo "Both Strings are equal" else echo "Strings are NOT equal" fi
= equal
!= not equal
< less then
> greater then
-n s1 string s1 is not empty
-z s1 string s1 is empty
Expresiones para los condicionales Comparaciones de archivos Ver algunos en español en http://doc.ubuntu-es.org/Script
-b filename Block special file -L filename Symbolic link
-c filename Special character file -O filename True if file exists and is owned by the effective user id.
-d directoryname
Check for directory existence -r filename Check if file is a readable
-e filename Check for file existence -S filename Check if file is socket
-f filename Check for regular file existence not a directory
-s filename Check if file is nonzero size
-G filename Check if file exists and is owned by effective group ID.
-u filename Check if file set-ser-id bit is set
-g filename true if file exists and is set-group-id. -w filename Check if file is writable
-k filename Sticky bit -x filename Check if file is executable
Expresiones para los condicionales
Comparaciones de archivos
#!/bin/bash if [ -e /carpeta/archivo ] then echo "File exists" else echo "File does not exists" fi
Tabla resumen
-e Verifica si el archivo existe
-d Verifica si el directorio existe
Sentencia for
Este bucle sirve para repetir un determinado numero de veces
una o varias instrucciones.
for variables in {inicio fin incremento}
do
instruccion1
instruccion2
done
Ejemplo de sentencia for
#!/bin/sh
# Script con bucle for para mostrar 5 veces un mensaje #
for i in {1..5..1}
do
echo “hola, esta es la vez $i“
done
Ejercicios propuestos
1. Cree un script que sea interpretado por bash, que al ejecutarse busque entre sus directorios, todos los archivos, ordene los nombres alfabéticamente y le cree un archivo de texto con esta información. Ayuda: Puede emplear la opción -R de ls para listar subdirectorios, y la opción -u de sort.
2. La variable de ambiente HOME contiene el nombre de su directorio personal. Comprúebelo y después empleela para cambiarse a su directorio. Después cambie esta variable y explique que ocurre con el comodín '~'.
3. ¿Qué hace el comando echo `ls` ? (note que se usan apóstrofes invertidos).
Ejercicios propuestos 4. Qué hace la secuencia:
N=6
echo "'1+$N' = $((1+$N))"
Después de dar su respuesta, compruébela empleando un intérprete de comandos.
5. Cree un script que al ser ejecutado, cree un archivo script2. El archivo script2 creado debe poner la variable PATH en el valor que tenga cuando el primer script sea ejecutado, añadir a tal variable la ruta /opt/bin y debe crear un alías que cuando se ejecute muestre el contenido de la variable PATH (no olvide cambiar el modo del archivo script2 generado para que sea ejecutable).
6. Escriba un sccript que cree sin intervención del ejecutante 50 usuarios: user1, user2, user3….user50. A cada uno le debe crear una carpeta llamada tareas, con un archivo dentro llamado listado. Cree también un script que elimine todo lo creado por el anterior script.
Ejercicios propuestos
6. Haga un script que después de ejecutarse pida al usuario 2 números y después presente la suma, la resta, el producto y la división.
7. Haga un script empleando condicional(s) if, para que se le pregunte a un usuario dos números para operarlos y que se le permita elegir que tipo de operación quiere realizar (+,-,*,%).
8. Cree un script que muestre un mensaje cada hora en todas las terminales o consolas que se tengan abiertas en el equipo. El mensaje debe decir : «Absténgase de hacer mal uso de los recursos, está siendo observado».
Fuentes
Fuentes disponibles a Octubre de 2012
http://aurea.es/wp-content/uploads/scriptsenlinux.pdf
http://linuxconfig.org/Bash_scripting_Tutorial
http://structio.sourceforge.net/guias/AA_Linux_colegio/scripts-basicos-para-bash.html
http://www.freeos.com/guides/lsst/ch02sec02.html
http://www.cyberciti.biz/faq/bash-for-loop/