Download - Intérprete de Comandos Script
![Page 1: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/1.jpg)
1
Intérprete de ComandosScript
Kepa Bengoetxea
![Page 2: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/2.jpg)
1
Referencia:
• http://www.tldp.org/LDP/abs/html/• http://www.e-ghost.deusto.es/docs/shellScriptin.html• man bash• http://es.tldp.org/Manuales-LuCAS/blfs-es/blfs-es-5.0/postlfs/profile.html
![Page 3: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/3.jpg)
1
Emulador de Terminal
• Emulador de terminal:Un emulador de terminal es un programa informático que simula el funcionamiento de un terminal de un ordenador central a través de una red de telecomunicaciones entre dicho ordenador central y el ordenador que ejecuta el emulador de terminal
• Existen diferentes “emuladores de terminal”:
– El emulador de terminal por excelencia es Telnet
– En los ordenadores personales destacan PuTTY y ssh– Para el escritorio Gnome: gnome-terminal– Para sistema de ventanas X Window System: xterm
![Page 4: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/4.jpg)
1
Emulador de Terminal
• Uso emulador de Terminal:– Acceder a un shell de UNIX – Se limitan a enviar y recibir caracteres de texto a través de
una red de comunicaciones. Los caracteres enviados se corresponden con pulsaciones en el teclado y los caracteres recibidos corresponden con la pantalla visualizada. Lo único que los diferencia es el tipo de terminal físico emulado. Dos modelos básicos:VT-100 y 3270
![Page 5: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/5.jpg)
1
Shell o Intérprete de Comandos
• Un shell es un programa que interpreta y ejecuta los comandos que el usuario escribe en un indicador de línea de comandos. Cuando inicie una terminal la aplicación activará el shell predeterminado especificado en la cuenta del sistema.
![Page 6: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/6.jpg)
1
Shell o Intérprete de Comandos
• Tipos:– Sh: Bourne shell– Csh:C shell. Ampliación sh con particularidades del
lenguaje C.– Bash: GNU Bourne-Again shell. Linux (defecto). Parecido
al sh. Sigue el standard IEEE POSIX(Portable Operating System Interface X de Unix, se traduce en, Sistema Operativo Portable basado en UNIX)
– Tcsh:Es la versión csh para Linux.• Cada usuario tiene un shell por defecto, que se asocia a la
hora de crear el usuario.
![Page 7: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/7.jpg)
1
Shell o Intérprete de Comandos• Un Interprete de Comandos “bash” es un aplicación de
usuario, no es parte del kernel(Si hacemos make xconfig no aparece por ningún lado. )
$dpkg-query -l bash->bash
3.2-0ubuntu7
$ dpkg-query -L bash
/bin/bash
/etc/skel/.bashrc
/etc/skel/.profile
/etc/skel/.bash_logout
rpm -qf /bin/bash ->bash-2.05b-38
$rpm -ql bash
/bin/bash
/bin/bash2
/bin/sh
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc ...
![Page 8: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/8.jpg)
1
Shell o Intérprete de Comandos
• Intérpretes de comandos: Command.com, bash...• Su funcionamiento es:
•Lee la entrada introducida por el usuario •Comprueba si el comando es
1.-un comando interno (Ejm:/bin/ls)2.-un alias (alias dir='ls')3.-un programa ejecutable(./principal.exe)
buscando en los caminos de su “echo $PATH”, si no lo encuentra dará un error.•Si lo encuentra,lo ejecuta. Si no es un comando o un programa dará error.
![Page 9: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/9.jpg)
1
Curiosidades:
• Historial de comandos: – history: muestra los comandos ejecutados por el usuario
asociados a un número– !nº : ejecuta el comando de dicho número.– Tecla arriba: ejecuta el último comando ejecutado.
• Uso del tabulador: ap [tab] rellena con apache
![Page 10: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/10.jpg)
1
Curiosidades:
• Uso ?,*,[]: – grep 4 *– grep 4 ???eba– grep 4[1-3] prueba
414243
– grep [Kk]epa prueba– grep 4[13] prueba
4143
![Page 11: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/11.jpg)
1
Creación de un ScriptScript->Es un fichero de comandos.1. Editar:$vi ejemplo
#crea un directorio ’lana’ y muestra sus ficheros ocultosmkdir lanacd lanals –a
2. $chmod u+rx ejemplo3. #copy ejemplo /usr/local/bin/4. $ejemplo Nota: ./ejemplo si el script no está en los caminos del
PATH (mirar con echo $PATH)
![Page 12: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/12.jpg)
1
Entorno y Variables#echo $SHELL ->/bin/bash#vi mensaje
echo “Estás en un curso de A.S.O: $nombre”#nombre=”Linux”#./mensaje#?#echo $nombre#?#export nombre #./mensaje#?Abre una nueva terminal:gnome-terminal#./mensaje
![Page 13: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/13.jpg)
1
Entorno y Variables
./mensaje ->Llamada a una bash hijo, que ejecuta dicho script.
#vi mensajesleep 15
# chmod 700 mensaje
(Antes de ejecutar)
# ps -lFF S UID PID PPID C PRI NI ADDR SZ WCHAN RSS PSR STIME TTY TIME
CMD
0 S kepa 3860 3858 0 76 0 - 1099 wait4 1244 0 18:14 pts/2 00:00:00 bash
0 R kepa 4093 3860 0 77 0 - 563 - 748 0 22:23 pts/2 00:00:00 ps -lF
![Page 14: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/14.jpg)
1
Entorno y Variables
(Después de ejecutar)#./mensaje &[1] 4100
# ps -lFF S UID PID PPID C PRI NI ADDR SZ WCHAN RSS PSR STIME TTY TIME
CMD
0 S kepa 3860 3858 0 75 0 - 1099 wait4 1248 0 18:14 pts/2 00:00:00 bash
1 S kepa 4100 3860 0 75 0 - 1099 wait4 1252 0 22:26 pts/2 00:00:00 bash
0 S kepa 4101 4100 0 77 0 - 933 - 480 0 22:26 pts/2 00:00:00 sleep 20
0 R kepa 4102 3860 0 78 0 - 563 - 748 0 22:26 pts/2 00:00:00 ps -lF
![Page 15: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/15.jpg)
1
Entorno y Variables
• 3 zonas de memoria:
– Área de datos locales al shell– Área de datos globales al shell– Área de datos globales a todos los shell
![Page 16: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/16.jpg)
1
Entorno y Variables
• Área de datos locales:
– Sólo es accesible en ese shell– Ningún subproceso(hijo) que se genere puede
acceder a él– Uso: Mientras se ejecuta el proceso– Se crea con: nom-variable-local=X– Se borra con:unset nom-variable-local
![Page 17: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/17.jpg)
1
Entorno y Variables
• Área de datos globales al shell:
– Accesibles para tu bash y los hijos de ese bash. Si abres otro shell o terminal no vale!
– Crear: export nombre=”Linux” ó nombre=”Linux” y export nombre
– Borrar: export –n nombre
![Page 18: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/18.jpg)
1
Entorno y Variables
• Área de datos globales a todos los shell:– Accesibles durante toda la sesión– Uso: Conocer las características de la sesión como: tipo
de terminal, rutas de búsqueda, directorio de presentación, indicativo de sistema etc...
– Editando /etc/profile; $HOME/.bashrc; $HOME/.bash_profile
#vi .bash_profilePATH=$PATH:$HOME/binexport PATH
![Page 19: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/19.jpg)
1
Entorno y Variables:Comandos
• set: Muestra la lista de variables locales definidas.• env:Muestra las variables globales o de entorno. Son
utilizadas por el sistema pero están a disposición del usuario.
• HOME: Contiene cual es dir.trabajo• PATH: Contiene lista de directorios a buscar• CDPATH:Contiene una lista de directorios a los que
podremos acceder sin añadir su path.• PPID:Contiene el identificador de proceso padre• PWD: el path del directorio donde estoy
![Page 20: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/20.jpg)
1
Entorno y VariablesComandos:echo
• SHLVL: Indica el nivel de anidación de intérpretes de comandos invocados.
• RANDOM: devuelve un número aleatorio.• SECONDS: muestra los segundos desde que se invocó.
• echo:Muestra el contenido(variable o texto)• echo $HOME
– >/home/kepa• echo –e "el contenido de mi carpeta:\n `ls -a` "
Nota:La opción -e permite incluir carac-s escape y comandos entre comillas graves dentro de texto con comillas dobles (` es la tecla de donde esta el [)
![Page 21: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/21.jpg)
1
Entorno y Variables
• Las variables en el bash son sin tipo, son una lista de caracteres que permite operaciones aritméticas si todos los caracteres son dígitos.
• Ejm:a=1a=`expr $a + 1`echo "$a"a="b"echo `expr $a + 1`
$ ./pru 2expr: argumento no numérico
![Page 22: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/22.jpg)
1
Comandos:echo
• echo– Caracteres escape:
– \c evita el salto de línea– \n inserta un salto de línea– \f inserta un salto de página– \t inserta un tabulador– \v inserta un tabulador vertical– \b código de retroceso– \r retorno de carro– \nnnn genera el código ASCII del número octal
![Page 23: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/23.jpg)
1
Comandos:echoCaracteres especiales (*,$,\,?,etc) son interpretados antes de pasarlos a echo, para controlar que tengan efecto o no se utilizan:
– Comillas simples(‘): Impide la interpretación» echo ‘$BEGO‘ ->$BEGO
– Comillas graves(`): Lo interpreta como comando» echo –e " mi carpeta:\n `cd` “ ->/home/kepa
– Comillas dobles("): Permite la intepretación de $,\, comillas simples, comillas dobles
» echo "$HOME“ ->/home/kepa– \ Elimina el significado del sgte carácter
» echo "\$HOME"->$HOME
![Page 24: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/24.jpg)
1
Estructuras de Control:test
• test: permite realizar comparaciones entre valores y variables, así como una serie de chequeos sobre ficheros– Comparar dos cadenas:
$test “hola” = “hola”echo $?0$test “hola” = “hola1”echo $?1
![Page 25: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/25.jpg)
1
Estructuras de Control:test– Comparar dos variables: cadenas
nomvar1=”kaixo”nomvar=”kaixo”test $nomvar = $nomvar1echo $?0
– Comparar dos variables: númerosnum1=1num2=1test $num1 = $num2echo $?0
![Page 26: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/26.jpg)
1
Estructuras de Control:test
– Tratamiento de cadenas:• test $cad1 = $cad2• test $cad1 != $cad2• test -z $cad #verdadero si cad esta vacía• test -n $cad #verdadero si cad no es nula• test $cad #verdadero si cad no es nula
– Tratamiento de expresiones numéricas:• test $num1 -eq $num2• test $num1 -ne $num2• test $num1 -lt $num2• test $num1 -le $num2• test $num1 -gt $num2• test $num1 -ge $num2
![Page 27: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/27.jpg)
1
Estructuras de Control:test• Tratamiento de Ficheros:
Ejm: nomfich="prueba.txt" test -f $nomfich
echo $? -> 0 – Retorna true(0) si...test -e $nomfich #si existe el fichtest -f $nomfich #si es fich normal (no un dir o un
dispositivo)test -s $nomfich #si su tamaño es distinto de 0test -d $nomfich #si es directoriotest -b $nomfich #si es un disp. de bloque (fd0,hda, ...)
![Page 28: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/28.jpg)
1
Estructuras de Control:test
• Tratamiento de Ficheros: test -c $nomfich #si es un disp. de carácter (keyboard,
modem, sound card, etc.)test -p $nomfich #si es una tuberíatest -h/-L $nomfich #si es un enlace simbólicotest -S $nomfich #si es un sockettest -r $nomfich #si tienes permiso de lecturatest -w $nomfich # si tienes permiso de escrituratest -x $nomfich # si tienes permiso de ejecucióntest -O $nomfich # si eres el propietario
![Page 29: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/29.jpg)
1
Estructuras de Control:test
• Opciones Fichero: Retorna true si...test -G $nomfich #si pertenece al grupo del ficherotest -N $nomfich #si ha sido modificado desde la última
vez que lo leístetest $nomfich1 -nt $nomfich2 #Si $nomfich1 es más
reciente que $nomfich2test $nomfich1 -ot $nomfich2 #Si $nomfich1 es posterior
a $nomfich2test $nomfich1 -ef $nomfich2 #Si $nomfich1 y $nomfich2 son enlaces duros del mismo fichero
![Page 30: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/30.jpg)
1
Estructuras de Control:test
• Opciones:– ! expr devuelve valor booleano contrario a la expr– expr1 -a expr2 es un AND– expr1 -o expr2 es un OREjm:y=1x=1if test $x -eq 1 -a $y -eq 1then echo "iguales"fi
![Page 31: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/31.jpg)
1
Estructuras de Control:test
– Ejemplo:if test -e $1then echo "El fichero $1 existe"else echo "El fichero $1 no existe"fi
![Page 32: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/32.jpg)
1
Comandos:read
• read: Permite la introducción de valores a través de un guión.
echo "introduce un directorio"
read dir
if test -d $dir
then
echo "El contenido del directorio es $dir"
echo "`ls $dir`"
fi
![Page 33: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/33.jpg)
1
Comandos:expr• Trabajar con números: expr
echo `expr 2 + 200` -> 202expr 4 \* 2expr 4 \> 2expr 4 % 2expr 4 \>= 2expr 4 / 2Nota: \ para evitar mezclar con los caracteres
especiales: *(cualquier carc),>,< (redireccionamiento)....
![Page 34: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/34.jpg)
1
Comandos:expr
• Ejm1: $vi pru
echo "Introduce dos números:"read n1 n2echo "La suma es `expr $n1 + $n2` "
$ chmod u+x pru$ ./pruIntroduce dos números:2 5La suma es 7
![Page 35: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/35.jpg)
1
Comandos:expr
• Ejm2:$vi pru
echo "Introduce dos números:"read n1 n2echo "La multiplicación es `expr $n1 \* $n2` "
$ chmod u+x pru$ ./pruIntroduce dos números:2 5La multiplicación es 10
![Page 36: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/36.jpg)
1
Estructura de Control: números y [ ]
• Otra manera de trabajar con números: [ ]if [ $valor1 -eq(=) $valor2 ] then
echo $valor1fi
Dejar un espacio
![Page 37: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/37.jpg)
1
Estructura de Control:Cadenas: test,[[]],(())
• test :Ejm: if test $1 = "LINUX" then echo "$1=LINUX"fiif test $1 = $2 then echo "$1=$2"fi#no utilizar -eq con caracteres!
![Page 38: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/38.jpg)
1
Cadenas:test,[[]],(())
• [[ ]] :Ejm: if [[ $1 == "LINUX" ]] then echo "$1=LINUX"fiif [[ $1 == $2 ]] then echo "$1=$2"fi#no utilizar -eq con caracteres!#no utilizar -eq con caracteres!if [[ $1 -eq $2 ]]if [[ $1 -eq $2 ]] then echo "$1=$2"then echo "$1=$2"fifi
![Page 39: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/39.jpg)
1
Uso:test,[[]],(())
if (( $1-eq $2 )) then echo "$1=$2"fiif (($1==$2)) then echo "$1=$2"fi
![Page 40: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/40.jpg)
1
Entorno y Variables:Parámetros
• Parámetros: $0,$1,$2,$3...$9– $0 contiene el nombre del script– $1 el primer parámetro que se le pasa al script.– $# indica el nº de parámetros con el que se ha llamado
al script.– $* lista de todos los parámetros.– $? código de error generado por la última orden. (0 true
y <>0 false)
![Page 41: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/41.jpg)
1
Entorno y Variables:Parámetros
• shift: Si necesitamos más de 9 parámetros, se desplaza hacia la izquierda en una posición, así $1 toma el valor de $2
• Otra manera de obtener los argumentos después del $9, es utilizando llaves, por ejm: ${10}, ${11}, ${12}Ejm: $vi pruecho "${11}"
./pru 1 2 3 4 5 6 7 8 9 10 1111
![Page 42: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/42.jpg)
1
Entorno y Variables: Parámetros
echo "El nombre del programa es $0"echo "El valor del primer parámetro es $1"echo "El valor del segundo parámetro es $2"echo "El numero de parámetros introducido es $#"echo "La lista de todos los parámetros es $*"shift echo "El valor del segundo parámetro después de un shift queda
en $1"echo "El valor que retorno es $?"
./pru 1 2 3 4 5 6 7 8 9 10 11
![Page 43: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/43.jpg)
1
Estructuras de Control: Secuencia
• Secuencial comandos:$ ls dir1 ; ls dir2 ; ls dir3 > fich.txt
• Grupo de comandos:$ (ls lana;ls dos) > fitx.txt
![Page 44: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/44.jpg)
1
Trucos
• Expansión de llaves:$ echo {one,two,red,blue}fishonefish twofish redfish bluefish
• Sustitución de Comandos: $(command) donde command tiene salida estándar. Se usa para asignar el valor a una variable o para pasar como parámetro a otro comando.
$ date +%d-%b-%Y
24-sep-2007
$ today=$(date +%d-%b-%Y)
$ echo $today
24-sep-2007
$ rpm -ql $(rpm -qa | grep httpd)
![Page 45: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/45.jpg)
1
Estructuras de Control:For
• For: ejecuta tantas veces como elementos en listafor contador in 1 2 3do
echo "El bucle durante $contador veces"doneNota: Va cogiendo los diferentes valores de la lista hasta
que finaliza cuando contador es null.
![Page 46: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/46.jpg)
1
Estructuras de Control:For
• For: ejecuta tantas veces como elementos en listacadena=$(seq 1 3)for a in $cadenado
echo holadoneseq 9 -1 1seq 1 9
![Page 47: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/47.jpg)
1
Estructuras de Control: Select
• select: Similar al for. Una vez ejecutado el grupo de comandos volverá a mostrarnos la lista de opciones sucesivamente hasta que pulsemos (Ctrl+C ó Ctrl+D)select user in alum301 alum302 alumn303do
echo "Enviando mensaje a $user"mail $user <msg
done
![Page 48: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/48.jpg)
1
Estructuras de Control:Select
• select:$ ./pru1) alum3012) alum3023) alumn303#? 2 (Introducido por teclado)Enviando mensaje a alum302
![Page 49: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/49.jpg)
1
Estructuras de Control:Select
• select:#? 3 (Introducido por teclado)Enviando mensaje a alumn303#? /home/kepa/dead.letter... Saved message in
/home/kepa/dead.letter#? Ctrl+D (Introducido por teclado)
![Page 50: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/50.jpg)
1
Estructuras de Control:Case
• case: vi menuecho "1: Mostrar fecha y hora"echo "2: listar directorio"echo "Introduzca su opcion"read opcioncase $opcion in
1)date;; 2)ls $HOME;; *)echo "Entrada no valida. adios";;esac
![Page 51: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/51.jpg)
1
Estructuras de Control:Case
• case: Elige una opción entre $ ./pru1: Mostrar fecha y hora2: listar directorioIntroduzca su opcion2Admin Contrapatentes.txt gcc.sxi
![Page 52: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/52.jpg)
1
Estructuras de Control:If
• if: $ ./pru lanaif mkdir $1then
echo "Creando directorio $1"echo "Copiando ficheros"cp ~/.* $1
elseecho "Error al crear el directorio $1"
fi
![Page 53: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/53.jpg)
1
Estructuras de Control:If-elifif test condition1 then
command elif test condition2 # Same as elseif
then command
else default-command
fi
![Page 54: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/54.jpg)
1
Estructuras de Control:while|until
• While|until:– while verdadero do ---- done– until falso do ----- done
while test $n -le 9do
echo "Introduzca un valor"read valor
acum=`expr $acum + $valor` n=`expr $n + 1`doneecho "Acumulado=$acum"
![Page 55: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/55.jpg)
1
Estructuras de Control:function
• Function:$vi prueba
function buenosdias(){
echo “egunon $1”}buenosdias $1
$./prueba Kepa
egunon Kepa
![Page 56: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/56.jpg)
1
Estructuras de Control:Exit
• exit: se usa para terminar un script o una función de un script. El valor que se devuelve lo recogerá el proceso padre.
• Todos los comandos retornan un exit donde 0 significa éxito y <> 0 un código de error. En caso de que nuestro script no tenga exit devolverá el estado del último comando ejecutado.
![Page 57: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/57.jpg)
1
Estructuras de Control:Exit#!/bin/bash echo hello echo $? # Echo devuelve un 0 ya que el
comando se ha ejecutado con éxitolskdf # No reconoce el comandoecho $? # Devuelve <> 0 ya que el
comando ha falladoexit 113 # Retornará 113 al shell# Para verificar escribe "echo $?" después
de ejecutar el script.
![Page 58: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/58.jpg)
1
Modos de ejecución de ScriptScript->Es un fichero de comandos.Ejm: vi ejemplo
mkdir lana
cd lana
ls –a
1.-$bash ejemplo2.-$ejemplo3.-$source ejemplo 4.-$. ejemplo5.-$exec ejemplo
![Page 59: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/59.jpg)
1
Modos de ejecución de Script
Ejm1: more ejemplo1#! /bin/bash#crea un directorio ’lana’ y muestra sus ficheros ocultosmkdir lanacd lanals –a
(*) Comprobar si se modifica el directorio actual en los 5 diferentes modos.
![Page 60: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/60.jpg)
1
Modos de ejecución de Script$ exec ejemplo1
Se ejecuta en el mismo proceso que le llama.Normalmente cuando se llama a un script secrea un subproceso hijo con fork para que lo ejecute.Aquí el comando reemplaza al shell y cuando elscript termina se cierra el shell, utilizándose enel último comando del script.
![Page 61: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/61.jpg)
1
Modos de ejecución de Script
Ejm:vi pruebals$ exec ./prueba
![Page 62: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/62.jpg)
1
Intérpretes: 2 Tipos
• Intérprete interactivo de conexión• Intérprete interactivo de no conexión
![Page 63: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/63.jpg)
1
Intérpretes: 2 Tipos
![Page 64: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/64.jpg)
1
Intérpretes: Conexión• Se ejecuta cuando abrimos una sesión con
telnet o ssh o programa mingetty...– El programa mingetty muestra un mensaje de login
(usuario: kepa passwd:******)– Después de introducir, se carga el /bin/login que lee
/etc/passwd o /etc/shadow– Si el usuario registrado está en dichos ficheros se inicia
una sesión interactiva con bash (se llama a /bin/bash), ésta ejecutará el script /etc/profile(todos los usuarios) y después uno de los siguientes scripts: ~/.bash_profile, ~/.bash_login o ~/.profile; y /etc/bashrc(si existe) y ~/.bashrc
![Page 65: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/65.jpg)
1
Intérpretes: No Conexión
• Se ejecuta cuando ejecutamos directamente el comando /bin/bash– ejecuta /etc/bashrc(si existe) – ejecuta ~/.bashrc
![Page 66: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/66.jpg)
1
Scripts: Inicio de Sesión./etc/profile (fedora)
USER=`id -un`LOGNAME=$USERMAIL="/var/spool/mail/$USER"HOSTNAME=`/bin/hostname`HISTSIZE=1000if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then INPUTRC=/etc/inputrcfiexport USER LOGNAME MAIL HOSTNAME HISTSIZE
INPUTRC
![Page 67: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/67.jpg)
1
Scripts: Inicio de Sesión./etc/profile (Ubuntu)
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) and Bourne compatible shells (bash(1), ...)umask 022
if [ "$PS1" ]; then if [ "$BASH" ]; then PS1='\u@\h:\w\$ ' if [ -f /etc/bash.bashrc ];
then . /etc/bash.bashrc fi else if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fifi
![Page 68: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/68.jpg)
1
Scripts:Inicio de Sesión.Variables de ambiente#archivo donde se almacena los comandos ejecutados
HISTFILE=~/.bash_history# Tamaño del ficheroHISTSIZE=1000# documentación en castellano del manMANPATH=/usr/share/man/esLANGUAGE=esLANG=es_ESexport LANG LANGUAGE MANPATH HISTFILE ...
![Page 69: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/69.jpg)
1
Scripts:Inicio de Sesión.Variables de ambiente
#cambiar el tipo de terminal:#si nos conectamos desde linux o windowsTERM=vt100 o ansi#Consultar los tipos de terminal ir a :
/usr/share/terminfo#Cambiar y consultar la base terminfo desde el bash
con el programa: tput bold #terminal muestra con negrita
![Page 70: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/70.jpg)
1
Scripts:Inicio de Sesión.Variables de ambiente
PS1 Y PS2• Contienen los prompts que bash presenta al usuario.• PS1: es el prompt principal (cuando espera
comandos)Ejm:[kepa@vppy118 share]$ echo $PS1[\u@\h \W]\$Puedo añadir PS1="[\u@\h \w \W]\$"[root@vppy118 ~ root]$export PS1Para más información: man bash
![Page 71: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/71.jpg)
1
Scripts:Inicio de Sesión.Variables de ambientePS1 Y PS2
• PS2: es el prompt secundario (cuando espera a que se complete la información de un comando)
[kepa@vppy118 kepa]$echo $PS2 >[kepa@vppy118 kepa]$for a in $(seq 1 3)> do> echo hola> doneholaholahola
![Page 72: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/72.jpg)
1
Scripts:Inicio de Sesión.
• En función del shell que se ejecute por defecto el fichero será diferente:
.login.bash_profile.profile
.profileFichero
Csh;tcshbashshShell
![Page 73: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/73.jpg)
1
Scripts:Inicio de Sesión.Fedora:.bash_profileif [-f ~/.bashrc]; then
. ~/.bashrc
fi
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
Ubuntu:.profileif [ -n "$BASH_VERSION" ];
then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fi
![Page 74: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/74.jpg)
1
Scripts:Personalización de entorno
.bashrc• Se ejecuta cuando abrimos un intérprete de
comandos , exceptuando cuando entramos en el inicio de sesión (que lo ejecuta el .bash_profile)
• Se utiliza para – Establecer el entorno para el prompt– Establecer el entorno para los scripts que ejecutemos.
![Page 75: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/75.jpg)
1
Scripts: Personalización de entorno
• En función del shell que se ejecute por defecto el fichero será diferente:
.cshrc.bashrc(no tiene)
Fichero
Csh;tcshbashshShell
![Page 76: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/76.jpg)
1
Scripts: Personalización de entorno
Fedora:.bashrc
if [-f etc/.bashrc]; then
. etc/.bashrc
fi
alias del=‘rm’
alias moer='more'
Ubuntu:.bashrc
export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth
if [ "$TERM" != "dumb" ]; then
eval "`dircolors -b`"
alias ls='ls --color=auto'
fi ...
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
![Page 77: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/77.jpg)
1
Scripts: fin de sesión
• En función del shell que se ejecute por defecto el fichero será diferente:
.logout.bash_logout.logoutFichero
Csh;tcshbashshShell
![Page 78: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/78.jpg)
1
Scripts:fin de sesión
.bash_logout• Se ejecuta cuando salimos de la sesión• Se utiliza para
– Dar mensajes de despedida– Limpiar la pantalla
![Page 79: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/79.jpg)
1
Scripts:fin de sesión.bash_logout(fedora)
clear
.bash_logout(Ubuntu)
# when leaving the console
clear the screen to
increase privacy
if [ "$SHLVL" = 1 ]; then
[ -x /usr/bin/clear_console ]
&& /usr/bin/clear_console
-q
fi
![Page 80: Intérprete de Comandos Script](https://reader033.vdocuments.pub/reader033/viewer/2022061119/546a776bb4af9f0a5d8b4648/html5/thumbnails/80.jpg)
1
Scripts: fin de sesión
• Ejm:.bash_logoutcleardateecho ***********************echo Laster arte Kepaecho ***********************