Sunteți pe pagina 1din 38

Scripts en Linux

Scripts Linux.
Por qu la programacin en shell?
Creando un script.
Comentarios.
Variables.
Comandos de shell. Comandos de shell.
Expresiones aritmeticas.
Expresiones lgicas.
Estructuras de control.
Ejemplos.
Por qu la programacin en shell.
Incluso existiendo varios interfaces grficos disponibles
para Linux el shell sigue siendo una herramienta muy
eficiente. El shell no es slo una coleccin de comandos
sino un buen lenguaje de programacin. Se pueden
automatizar muchas tareas con l, el shell es muy til
para tareas de administracin, puedes comprobar
rpidamente si tus ideas funcionan lo que lo hace muy rpidamente si tus ideas funcionan lo que lo hace muy
til cuando ests creando un prototipo y es muy til para
pequeas utilidades que realizan tareas relativamente
simples donde la eficiencia importa menos que la
facilidad de configuracin, mantenimiento y portabilidad.
Creando un script.
Existen muchos shells disponibles para Linux pero
habitualmente se utiliza el bash (bourne again shell)
para la programacin en shell ya que est disponible
libremente y es fcil de usar.
Para escribir nuestros programas en shell usaremos
cualquier clase de editor de texto, p.ej. Kwrite, vi...
como con otros lenguajes de programacin. como con otros lenguajes de programacin.
El programa debe empezar con la siguiente lnea (debe
ser la primera lnea del fichero):
#!/bin/sh
Creando un script.
#!/bin/sh.
Lo caracteres #! indican al sistema que el primer
argumento que sigue en la linea es el programa a
utilizar para ejecutar este fichero. En este caso
usamos el shell /bin/sh.
Cuando hallas escrito y guardado tu script debes
hacerlo ejecutable para poder usarlo. hacerlo ejecutable para poder usarlo.
Para hacer el script ejecutable escribe
chmod +x nombre-del-fichero
Despus puedes ejecutar tu script escribiendo:
./nombre-del-fichero
Comentarios.
Los comentarios en la programacin en shell
comienzan con # se prolongan hasta el final de
la lnea. Te recomendamos que uses
comentarios. Si tienes comentarios y no usas
un cierto script durante algn tiempo
inmediatamente sabrs qu hace y cmo
funciona.
Variables.
Como en otros lenguajes de programacin no
se puede vivir sin variables.
En la programacin en shell todas las variables
son de tipo string (cadena) y no es necesario
declararlas.
Para asignar un valor a una variable se escribe:
nombre_de_la_variable = valor.
Para obtener el valor de la variable
simplemente hay que poner el signo del dlar $
delante de la variable.
Variables.
Ejemplo:
#!/bin/sh
# asignamos un valor:
a="hola mundo"
# ahora mostramos el contenido de "a": # ahora mostramos el contenido de "a":
echo "A es:"
echo $a
Variables.
Ejemplo: si queremos que se muestre en la
misma linea por pantalla.
#!/bin/sh
# asignamos un valor:
a=2045 a=2045
# ahora mostramos el contenido de "a":
echo "A es: ${a}"
Variables especiales.
$0: nombre completo del SHELL.
$1......$9: argumentos.
$#: numero de argumentos.
$?: valor devuelto por una funcin.
Comandos shell (vistos en clase).
echo.
ls.
wc.
cp
mv.
rm
grep. grep.
cut.
cat.
read.
sort.
head.
tail.
Comandos shell (nuevos).
file nombre_fichero: describe que tipo de fichero es
nombre_fichero.
uniq: borra las lineas duplicadas, usando un combinacin con
sort ya que slo borra las lineas duplicadas consecutivas.
sort fichero.txt | uniq
basename: devuelve el nombre del fichero quitandole la ruta
completa. Ejemplo:
basename /home/ramon/practica.sxw. basename /home/ramon/practica.sxw.
Devuelve solo practica.sxw.
dirname: lo contrario que el anterior.
Comillas simples invertidas (o tilde invertida)
Se usan para la ejecucin de comandos:
Ejemplos:
echo `date`.
usuarios = `who | wc -l`
Operaciones aritmticas.
Se usa el comando let expresin o (( expresin ))
Ejemplos:
let x=2+3
echo $x
let y=$x*5
echo $y
Operador Significado
* / % Multiplicacin,
divisin y resto
+ - Suma y Resta
<=, >=, <, > Relacionales
echo $y

(( x = 2 + 3 ))
echo $x
(( y = $x * 5 ))
echo $y
<=, >=, <, > Relacionales
==, != Igualdad y
Desigualdad
= Asignacin
&& Y lgico
|| O lgico
Operaciones aritmticas.
Ejercicio 1.
Escriba un programa para convertir entre
grados Fahrenheit y Celsius. La frmula de
conversin es la siguiente:
C = 5/9 * ( F 32 )
Operaciones aritmticas.
Ejercicio 2.
Escriba un programa similar al anterior que
calcule el rea de un crculo.
Area = PI * r2. Area = PI * r2.
Operaciones aritmticas.
Ejercicio 3.
Escriba un programa que lea un instante de
tiempo expresado en horas, minutos y
segundos y calcule el nmero de segundos
transcurridos desde las cero horas hasta dicho transcurridos desde las cero horas hasta dicho
instante de tiempo.
Operaciones lgicas.
Comando test [ expresin ]
Test sobre ficheros
Sintaxis Explicacin
-e <FICHERO> True si <FICHERO> existe.
-f <FICHERO> True, si <FICHERO> existe y es un fichero regular.
-d <FICHERO> True, si <FICHERO> existe y es un directorio.
-c <FICHERO> True, si <FICHERO> existe y es un fichero esecial de car!cter.
-" <FICHERO> True, si <FICHERO> existe y es un fichero esecial de "lo#ue.
-$ <FICHERO> True, si <FICHERO> existe y es un fichero esecial de soc%et.
-& <FICHERO> True, si <FICHERO> existe y es un enlace si'"(lico )acceso directo*. Igual #ue -h.
-h <FICHERO> True, si <FICHERO> existe y es un enlace si'"(lico )acceso directo*. Igual #ue -&.
-g <FICHERO> True, si <FICHERO> existe y tiene el "it $+I, ha"ilitado.
-u <FICHERO> True, si <FICHERO> existe y tiene el "it $-I, ha"ilitado.
-r <FICHERO> True, si <FICHERO> existe y se tiene er'iso de lectura.
-. <FICHERO> True, si <FICHERO> existe y se tiene er'iso de escritura.
-x <FICHERO> True, si <FICHERO> existe y se tiene er'iso de e/ecuci(n.
-s <FICHERO> True, si <FICHERO> existe y no est! 0acio, es decir su ta'a1o es 'ayor de 2 "ytes.
-t <fd> True, si <FICHERO> descritor <fd> est! a"ierto y se refiere aun ter'inal.
<FICHERO3> -nt <FICHERO4> True, si <FICHERO3> es '!s nue0o #ue <FICHERO4> )'ti'e*.
<FICHERO3> -ot <FICHERO4> True, si <FICHERO3> es '!s antiguo #ue <FICHERO4> )'ti'e*.
<FICHERO3> -ef <FICHERO4> True, si <FICHERO3> es un enlace duro al <FICHERO4>.
Operaciones lgicas.
Test sobre cadenas
Sintaxis Explicacin
-5 <C6,E76> True, si <C6,E76> esta 0ac8a.
-n <C6,E76> True, si <C6,E76> no est! 0ac8a.
<C6,E763> 9 <C6,E764> True, si las cadenas son iguales.
<C6,E763> :9 <C6,E764> True, si las cadenas no son iguales.
<C6,E763> < <C6,E764> True si <C6,E763> 0a antes #ue <C6,E764> alfa";tica'ente. Recuerda escaar el car!cter < , usa <<
<C6,E763> > <C6,E764> True si <C6,E763> 0a desu;s #ue <C6,E764> alfa";tica'ente. Recuerda escaar el car!cter < , usa <<
Test sobre nmeros
Sintaxis Explicacin
<E7TERO3> -e# <E7TERO4> True, si los enteros son iguales.
<E7TERO3> -ne <E7TERO4> True, si los enteros no son iguales. <E7TERO3> -ne <E7TERO4> True, si los enteros no son iguales.
<E7TERO3> -le <E7TERO4> True, si el ri'ero entero es 'enor o igual #ue el segundo.
<E7TERO3> -ge <E7TERO4> True, si el ri'ero entero es 'ayor o igual #ue el segundo.
<E7TERO3> -lt <E7TERO4> True, si el ri'ero entero es 'enor estricto #ue el segundo.
<E7TERO3> -gt <E7TERO4> True, si el ri'ero entero es 'ayor estricto #ue el segundo.
Operaciones sobre test
Sintaxis Explicacin
<TE$T3> -a <TE$T4> True, si <TE$T3> y <TE$T4> son true )67,*.
<TE$T3> -o <TE$T4> True, si <TE$T3> o <TE$T4> son true )OR*.
: <TE$T> True, si <TE$T> es false )7OT*.
) <TE$T> ) 6grua un test ara alicar recedencia.
Estructuras de control (if).
La sentencia "if" comprueba si una condicin
es verdadera (con salida de estado 0, correcto).
Si es correcto entonces se ejecuta la parte
"then":
if ....; then
.... ....
elif ....; then
....
else
....
fi
Estructuras de control (if).
Ejemplos.
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo "tu shell es el bash (bourne again shell)"
else
echo "tu shell no es bash sino $SHELL"
fi fi
Estructuras de control (if).
Ejemplos.
#!/bin/sh
if [ -f "/etc/shadow" ]; then
echo "Este ordenador usa shadow passwords"
fi
If.
Ejercicio 1.
Escriba un script que compruebe si la ruta
pasada como argumento en la llamada al
script existe o no, en caso afirmativo deber
mostrar un listado detallado de lo que contiene mostrar un listado detallado de lo que contiene
esa ruta, en caso negativo deber mostrar un
error en pantalla.
If.
Ejercicio 2.
Escriba un script que compruebe si la nota
pasada como argumento esta aprobada o no.
Si la nota es mayor o igual a 5 se deber
mostrar por pantalla un mensaje que diga mostrar por pantalla un mensaje que diga
APROBADO, si la nota es menor de 5 se
deber mostrar un mensaje que diga
SUSPENSO.
If.
Ejercicio 3.
1. Escriba un script que lea un nmero pasado
como argumento y diga si es positivo,
negativo, o cero.
Estructuras de control (select).
La sentencia select es una extensin especfica
del bash y es muy til para usos interactivos.
El usuario puede escoger una opcin de una
lista de difirentes valores:
select var in ... ; do
break break
done
.... ahora podemos usar $var ....
Estructuras de control (select).
Ejemplo.
#!/bin/sh
echo "Cul es tu sistema operativo favorito?"
select var in "Linux" Windows" "Otros"; do
break break
done
echo "Has seleccionado $var"
Select + if.
Ejercicio 1.
1. Escriba un script que muestre por pantalla un
men con las siguientes opciones.
rea de figuras geomtricas.
Cuadrado (lado * lado).
Triangulo (base * altura/2). Triangulo (base * altura/2).
Una vez seleccionada la opcin deber
calcular el ara correspondiente.
Estructuras de control (bucles).
while.
while ...; do
....
done
El bucle while se ejecutar mientras la El bucle while se ejecutar mientras la
expresin que comprobamos sea verdadera.
While.
Ejercicio 1.
1. Escriba un script que muestre por pantalla los
100 primeros nmeros naturales.
While.
Ejercicio 2.
1. Escriba un script que muestre por pantalla la
tabla de multiplicar de un nmero pasado
como argumento. Se debe comprobar que solo
se ha pasado un argumento. se ha pasado un argumento.
While.
Ejercicio 3.
1. Escriba un script que compruebe si los datos
de un fichero son todos nmeros positivos.
Funciones.
Tan pronto como tengamos un programa ms
complejo nos encontraremos con que estamos
usando el mismo cdigo en varias partes y que
sera de ms ayuda el darle cierta estructura.
Una funcin es similar a esto:
nombredelafuncion() nombredelafuncion()
{
# dentro del cuerpo $1 es el primer argumento dado a la funcin
# $2 el segundo ... cuerpo
}
Funciones.
Las funciones tambin pueden devolver valores
al script que la llama mediante la instruccin
return:
Funciones.
Ejemplos.
Funcin que no devuelve nada.
#!/bin/sh
#script principal.
echo detectar si un fichero llamado .quote existe o no
Existefichero()
#hasta aqu el script principal.
################# funcion #####################3
Existefichero() Existefichero()
{
if [ -f .quote ]; then
echo el fichero existe"
else
echo el fichero no existe"
fi
}
Funciones.
Ejemplos.
Funcin que devuelve un valor.
#!/bin/sh
#script principal.
echo detectar si un fichero existe o no
Existefichero()
If [ $? = 1 ]
Then
echo el fichero existe
Else
echo el fichero no existe
fi
#hasta aqu el script principal. #hasta aqu el script principal.
################# funcion #####################3
Existefichero()
{
if [ -f $1 ]; then
return 1
else
return 0
fi
}
Funciones.
Ejercicio 1.
1. Escriba un script que muestre por pantalla un
men con las siguientes opciones.
rea de figuras geomtricas.
Cuadrado (lado * lado).
Triangulo (base * altura/2). Triangulo (base * altura/2).
Una vez seleccionada la opcin deber
calcular el ara correspondiente PARA CADA
OPCION SE DEBE CREAR UNA FUNCIN.
Funciones.
Ejercicio 2.
1. Escriba un script llamado directorio que
muestre por pantalla un men con las
siguientes opciones.
Operaciones con directorios.
Crear directorio. Crear directorio.
Eliminar directorio.
Listar directorio.
Permisos directorio.
Una vez seleccionada la opcin deber
calcular el ara correspondiente PARA CADA
OPCION SE DEBE CREAR UNA FUNCIN.

S-ar putea să vă placă și