1 intérprete de comandos script kepa bengoetxea. 1 referencia:

94
1 Intérprete de Comandos Script Kepa Bengoetxea

Upload: piedad-pichon

Post on 23-Jan-2016

226 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Intérprete de ComandosScript

Kepa Bengoetxea

Page 2: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Emulador de Terminal• Emulador de terminal:Un emulador de terminal es un

programa informático que simula el funcionamiento de una 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: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Emulador de Terminal

• Uso emulador de Terminal:– Acceder a una 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: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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.

• 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.

Page 6: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Shell o Intérprete de Comandos• Cada usuario tiene un shell por defecto, que se asocia a la

hora de crear el usuario.

• 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-0ubuntu18

$ dpkg-query -L bash

/bin/bash

/etc/skel/.bashrc

/etc/skel/.profile

/etc/skel/.bash_logout

Page 7: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 8: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 9: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Curiosidades:

• Uso ?, *, [, ]: – grep 4 *– grep 4 ???eba– grep 4[1-3] prueba

414243

– grep [Kk]epa prueba– grep 4[13] prueba

4143

Page 10: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Creación de un ScriptScript->Es un fichero de comandos.1. Editar:$gedit backup.sh#!/bin/bash#crea un copia de mi carpeta /home/kepa

cd /home

nombrefich="`date +%G`-`date +%m`-`date +%d`kepa"

tar -cvzf /tmp/$nombrefich.tar.gz kepa

2. $chmod u+rx backup.sh3. [cp backup.sh /usr/local/bin/] para todos4. $backup.sh Nota: ./backup.sh si el script no está en los caminos del

PATH (mirar con echo $PATH)

Page 11: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 12: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 13: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 14: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 15: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 16: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 17: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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/.profile

$vi .bashrcPATH=$PATH:$HOME/binexport PATH

Page 18: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Entorno y Variables:Comandos

• set: Muestra las variables locales y globales o de entorno. On Ubuntu and Debian systems, the set command will also list shell functions after the shell variables. Use set | less to see the variables then.

• 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 19: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Entorno y Variables

• 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ó.

Page 20: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 21: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Comandos:echo

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 22: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 '$HOME' ->$HOME

– Comillas graves(`): Lo interpreta como comando» echo –e " los usuarios conectados son:\n`who` “

– 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: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Comandos:read

• read: Permite la introducción de valores a través de un guión.

echo "introduce un directorio"

read dir

echo "El contenido del directorio es $dir"

echo "`ls $dir`"

Esto equivale a:

read -p "introduce un directorio" $dir

echo "El contenido del directorio es $dir"

echo "`ls $dir`"

Page 25: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Comandos:printf

• printf fstring vars: Muestra los valores de vars según el formato especificado en fstring.

$ printf '%s\t :tu carpeta de inicio es %s\n' $USER $HOME

kepa :tu carpeta de inicio es /home/kepa

$ printf "%s\t :tu carpeta de inicio es %s\n" $USER $HOME

kepa :tu carpeta de inicio es /home/kepa

Page 26: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Comandos:$?

$?: Valor de la salida del último comando ó Código de error generado por la última orden. (0 true y <> 0 false)

$mkdir lana (Correcto)

$$?

0

$mdirk lana (Error)

$$?

1 (valor distinto de 0)

Page 27: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 28: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 -eq $num2echo $?0

Page 29: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 30: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 31: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 32: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructura de Control:test,[],[[]],(())

• Cadena :Ejm: var="LINUX"if test $var = "LINUX" then echo "$var=LINUX"fi Número:Ejm: num1=2if test $num1 -eq 2 then echo "$num1=2"fi#no utilizar -eq con caracteres!

Page 33: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructura de Control:test,[],[[]],(())

Los [] ejecutan el comando “test”var="LINUX"if [ $var = "LINUX" ] then echo "$var=LINUX"finum1=2if [ $num1 -eq 2 ] then echo "$num1=2"fi

Dejar un espacio

Page 34: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructura de Control:no usartest,[],[[]],(())

• [[ ]] :Ejm: if [[ $1 == "LINUX" ]] then echo "$1=LINUX"fiif [[ $1 == $2 ]] then echo "$1=$2"fi#no utilizar -eq con caracteres!if [[ $1 -eq $2 ]] then echo "$1=$2"fi

Page 35: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructura de Control:no usartest,[],[[]],(())

if (( $1 == $2 )) then echo "$1=$2"fi

Page 36: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 37: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Debugging

El shell también tiene un modo de depuración real. Si hay un error en tu script "scriptconerror" entonces puedes depurarlo con:

bash -x scriptconerror

Esto ejecutará el script y mostrará todas la sentencias que se ejecutan con las variables y comodines ya expandidos.

Page 38: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:If(expr)

if expr/comando; thenelsefi• Si la expr o comando devuelve 0 (true) si devuelve distinto

de 0 (false) #!/bin/bash

if test "petete" = "petete" ; then

echo expresión evaluada como verdadera

else

echo expresión evaluada como falsa

fi

Page 39: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:If(comando)

if expr/comando; thenelsefiEjm: gedit copia.sh

if mkdir $1then

echo "Creando directorio $1"echo "Copiando ficheros"cp ~/.* $1

elseecho "Error al crear el directorio $1"

fi$./copia.sh lana

Page 40: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:If(and,or,not)

• ! expr devuelve valor booleano contrario a la expr• expr1 -a expr2 es un AND• expr1 -o expr2 es un OR

Ejm:y=1x=1if test $x -eq 1 -a $y -eq 1then echo "iguales"fi

Page 41: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:If(ficheros)

– Ejemplo:

read -p "introduce un fichero" $file

if test -e $file ; then

echo "El fichero $file existe"

else

echo "El fichero $file no existe"

fi

Page 42: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:If-elifif test condition1 then

command elif test condition2 # Same as elseif

then command

else default-command

fi

Page 43: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:If-elifread -p "introduce un fichero" $file

if [ -z $file ] ;then echo “cadena vacia no permitido”

exit 1

elif [ ! -w $file ];then

echo “no tienes permiso de escritura”

exit 1

else

echo “kaixo $USER” >> $file

fi

....

exit 0

Page 44: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Comandos:expr• Trabajar con números: expr

echo `expr 2 + 200` -> 202

n=`expr 4 + 2`

n=`expr 4 - 2

n=`expr 4 \* 2` #n=8

n=`expr 5 % 2` #n=1 (resto)

n=`expr 5 / 2` #n=2 (parte entera)Nota: \ para evitar mezclar con los caracteres

especiales: *(cualquier car)

Page 45: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 46: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 47: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Operaciones Aritméticas:$(())

• $(()):Evalúa la expresión como operación entre enteros

n=$(( 4 + 2 ))

n=$(( 4 - 2 ))

n=$(( 4 * 2 )) #n=8

n=$(( 5 % 2 )) #n=1 (resto)

n=$(( 5 / 2 )) #n=2 (parte entera)

y=200

x=$(( $y/2 ))

echo $x

100

Page 48: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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.

Page 49: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 50: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 número 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 51: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Entorno y Variables: {}

{}Las llaves son la síntaxis general usada para la sustitución de variables y $ hace uso de las llaves alrededor del elemento referenciado

$1 puede escribirse como $1 ó ${1}$PATH puede escribirse como ${PATH}¿Cuando usamos las llaves?Diferencias entre usar:echo "${11} o $11 o ${1}1"echo "$PATH2 o ${PATH}2"

Page 52: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Variables: ${variable:x:y}

${HOME:0:1} El sufijo :0:1 que sigue al nombre de la variable se utiliza para extraer de HOME la subcadena que comienza en la primera posición (los caracteres se enumerran comenzando desde 0), y continúa 1 caracter más. Es decir, este sufijo se utiliza para conseguir el primer carácter de la variable.

Page 53: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 54: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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. Es equivalente a `command`.

$ date +%d-%b-%Y

28-sep-2009

$ today=$(date +%d-%b-%Y)

echo $today $

sep-2009-28

date +%d-%b-%Y $

sep-2009-28

today=$(date +%d-%b-%Y) $

$ echo $today

28-sep-2009

$dpkg-query -L $(dpkg-query -l | grep vim)dpkg-query -L $(dpkg-query -l | grep vim)$

Page 55: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Variables: Eval

eval cadena :evalúa la cadena tras la sustitución de las variables. Convert a string into a command.

The eval command can be used for code generation from the command-line or within a script.

bash$ command_string="ps ax"

bash$ process="ps ax"

bash$ eval "$command_string" | grep "$process"

Page 56: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 57: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:For

• For: ejecuta tantas veces como elementos en lista

cadena=$(seq 1 3)

for a in $cadena

do

echo hola

done

seq 9 -1 1

seq 1 9

Page 58: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 < “Soy vuestro profesor de ASO”

done

*Nota:sudo apt-get install mailutils

Page 59: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:Select

• select:$ ./pru1) alum3012) alum3023) alumn303#? 2 (Introducido por teclado)Enviando mensaje a alum302

Page 60: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 61: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:Case

• case: vi menuecho "1: Mostrar fecha y hora"echo "2: listar directorio"echo "Introduzca su opción"read opcioncase $opcion in

1)date;; 2)ls $HOME;ls /home/euiti/lana;; *)echo "Entrada no válida. adiós";;esac

Page 62: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 63: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:while|until

• While|until: while condición(true)|comando;(comando devuelva una salida)

do ---- done

until condición(false)|comando;(comando no devuelva una salida)

do ----- done acum=0while test $n -le 9do

echo "Introduzca un valor"read valor

acum=`expr $acum + $valor` n=`expr $n + 1`doneecho "Acumulado=$acum"

Page 64: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Function (Parámetros)• $vi prueba

function buenosdias(){ echo "egunon $1"}buenosdias $1

$./prueba Kepa

egunon Kepa

Page 65: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Function (Incluir funciones)$vi funciones

function buenosdias(){echo "egunon $1"}

$vi principal.sh. ./funcionesecho "introduce tu

nombre"read n1 buenosdias $n1

$chmod +x funciones principal.sh

$./principal.sh

introduce tu nombre

kepa

egunon kepa

Page 66: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Function (Return)$vi prueba2.sh

function igualabc ()

{if test $1 = "abc"

then return 0

else return 1

fi}

echo “Introduce un valor”

read valor

igualabc $valor

echo $?

./prueba2.sh

“Introduce un valor”

abc

0

$ ./prueba2.sh

“Introduce un valor”

pepe

1

Page 67: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Function (Exit)$vi prueba2.sh

function igualabc ()

{if test $1 = "abc"

then exit 0

else exit 1

fi}

echo “Introduce un valor”

read valor

igualabc $valor

echo $?

./prueba2.sh

“Introduce un valor”

abc

$ ./prueba2.sh

“Introduce un valor”

pepe

Page 68: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:Return

return [n]

– Salida de una función con el valor de retorno n.

– Si se omite n , retorna el estado del último comando

ejecutado en el cuerpo de la función.

Page 69: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Estructuras de Control:Exit

• exit: se usa para terminar 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 70: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 71: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Modos de ejecución de ScriptScript->Es un fichero de comandos.Ejm: vi ejemplo.sh

mkdir lana

sleep 10

cd lana

ls –a

1.-$bash ./ejemplo.sh ó sh ./ejemplo.sh2.-$./ejemplo.sh3.-$source ./ejemplo.sh 4.-$. ./ejemplo.sh5.-$exec ./ejemplo.sh

Page 72: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Modos de ejecución de Script

Ejm1: more ejemplo1#! /bin/bash //obligo que se abra un hijo 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 73: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Modos de ejecución de ScriptSource se utiliza normalemente en 2 casos:

a) Para hacer visibles las variables que están definidas en un fichero desde el bash padre.

.profile

PATH="$PATH:$HOME/bin"

export PATH

b) Si quiero incluir funciones reusables en mi script:

$vi funciones:

function buenosdias(){echo "egunon $1"}

$vi principal.sh:

source ./funciones

buenosdias $1

Page 74: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 se crea un

subproceso hijo con fork para que lo ejecute.Aquí el comando reemplaza al shell y cuando el

script termina se cierra el shell, utilizándose en el último comando de un script.

Ejm:pstree -p o echo $$ detecta el PID del bashexec shexec sleep 10pstree -p (desde otra terminal)¿Qué ocurre?

Page 75: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Modos de ejecución de Script

Ejm:vi pruebals$ exec ./prueba

Page 76: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Intérpretes: 2 Tipos

• Intérprete interactivo de conexión• Intérprete interactivo de no conexión

Page 77: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Intérpretes: 2 Tipos

Page 78: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 79: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Intérpretes: No Conexión

• Se ejecuta cuando ejecutamos directamente el comando /bin/bash– ejecuta /etc/bashrc(si existe) – ejecuta ~/.bashrc

Page 80: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 81: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Scripts: Inicio de Sesión./etc/profile

# /etc/profile

if [ -d /etc/profile.d ]; then

for i in /etc/profile.d/*.sh; do

if [ -r $i ]; then

. $i

fi

done

unset i

fi

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

fi

fi

Page 82: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Scripts:Inicio de Sesión.Variables de ambiente

#archivo donde se almacena los comandos ejecutadosHISTFILE=~/.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 83: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Scripts:Inicio de Sesión.Variables de ambiente

#cambiar el tipo de terminal:#si nos conectamos desde linux o windowsTERM=vt100 o ansi o xterm#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 84: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 85: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 86: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Scripts:Inicio de Sesión.

• En función del shell que se ejecute por defecto el fichero será diferente:

.login.bash_profile

.bash_login

.profile

.profileFichero

Csh;tcshbashshShell

Page 87: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 88: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 89: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Scripts:Personalización de entorno

.bashrc• Se ejecuta cada vez que abrimos un intérprete de

comandos bash, excepto 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 90: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 91: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 92: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 93: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

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 94: 1 Intérprete de Comandos Script Kepa Bengoetxea. 1 Referencia:

1

Scripts: fin de sesión

• Ejm:.bash_logoutcleardateecho ***********************echo Laster arte Kepaecho ***********************