Está en la página 1de 25

LINUX Bsico

TAKASHI SUGASAWA

LINUX Bsico (8. Shells(3))

Programa del curso


1. 2. 3. 4. 5. 6. 7. 8. 9.
Introduccin a LINUX Operacin bsica de LINUX Operacin de archivos y directorios Editor vi Comprensin del sistema de ficheros Shells(1) Shells(2) Shells(3) Otros comandos
LINUX Bsico (8. Shells(3)) 2

LINUX Bsico
8. Shells(3) ndice
8.1 8.2 8.3 8.4 8.5 Introduccin a scripts de shell Redaccin de scripts de shell Programacin con control Procesos de scripts de shell Ajuste del ambiente del shell
LINUX Bsico (8. Shells(3)) 3

8.1 Introduccin a scripts de shell


(1) Comprensin de los scripts de shell Normalmente escribimos los comandos en la terminal
usando el teclado. O sea los comandos pueden provenir de un archivo. Un script de shell es una coleccin de uno o ms comandos de shell en un archivo. Para ejecutar los comandos en el script de shell, basta con escribir el nombre del archivo. Las ventajas de scripts de shell son que:
No tiene que volver a escribir una secuencia de comandos. Determina los pasos para llevar a cabo un objeto una vez. Simplifica operaciones para usted mismo y para otros.

LINUX Bsico (8. Shells(3))

8.1(2) Un ejemplo de scripts de shell Ahora vamos a crear un script de shell donde que
1. Primero, confirme que est en el su directorio base. [usr000@linuxpc usr000]$ pwd /home/usr000 2. Inicie vi con el nombre del archivo, vi donde. [usr000@linuxpc usr000]$ vi donde

ejecute 3 comandos whoami, hostname, pwd en secuencia.

3. Escriba como siguiente en el vi. whoami hostname primero teclee i, despus escriba el texto. pwd 4. Salga de vi guardando el archivo. teclee ESC, Z, Z

LINUX Bsico (8. Shells(3))

5. Confirme el existencia el archivo y su contenido. [usr000@linuxpc usr000]$ ls -l donde -rw-rw-r-1 usr000 usr000 20 sep 22 09:29 donde [usr000@linuxpc usr000]$ cat donde whoami hostname pwd 6. Agregue el permiso de ejecucin al archivo. [usr000@linuxpc usr000]$ chmod +x donde [usr000@linuxpc usr000]$ ls -l donde -rwxrwxr-x 1 usr000 usr000 20 sep 22 09:29 donde 7. Ejecute el archivo. [usr000@linuxpc usr000]$ ./donde usr000 el resultado del script de shell linuxpc /home/usr000 Si no sale as, chequee el contenido o los permisos del archivo.

LINUX Bsico (8. Shells(3))

8.1(3) Arranque de scripts de shell Podemos ejecutar un script de shell como sigue
tambin. bash <nombre_de_script>
[usr000@linuxpc[usr000@linuxpc usr000]$ ./donde usr000 linuxpc /home/usr000 igual [usr000@linuxpc usr000]$ bash donde usr000 linuxpc /home/usr000

En este caso, el permiso de ejecucin no es necesario.


[usr000@linuxpc [usr000@linuxpc -rw-rw-r-1 09:29 donde [usr000@linuxpc usr000 linuxpc /home/usr000 usr000]$ chmod -x donde usr000]$ ls -l donde usr000 usr000 20 sep 22 usr000]$ bash donde

LINUX Bsico (8. Shells(3))

El shell tiene opciones que son convenientes en el


caso de la depuracin.
-x: El shell sale cada comando (detrs de un +) a stderr antes de ejecutarlo. -v: El shell sale sus entradas a stderr al captar los. -n: El shell solamente pasa los comandos, no ejecuta los.
[usr000@linuxpc usr000]$ bash -x donde + whoami usr000 + hostname linuxpc + pwd /home/usr000 [usr000@linuxpc usr000]$ bash -nv donde whoami hostname pwd

LINUX Bsico (8. Shells(3))

8.1(4) Variedad de scripts de shell Cada shell (BASH, Shell Bourne, Shell C, tcsh, ...) tiene
su manera de descripcin de scripts.
BASH es el shell derivado de Shell Bourne. Por eso, BASH puede ejecutar los scripts de Shell Bourne. En este curso, aprendemos scripts de BASH.

LINUX Bsico (8. Shells(3))

8.2 Redaccin de scripts de shell


(1) Seleccin de shell que se arranca
La descripcin como sigue en la cabeza del script, selecciona el
tipo del shell que se arranca.

#!/bin/bash
nombre de ruta de acceso del shell

Vamos a escribirlo como frase hecha, para definir el tipo del script de shell.
[usr000@linuxpc usr000]$ cat donde2 #!/bin/bash whoami hostname pwd [usr000@linuxpc usr000]$ ./donde2 usr000 linuxpc /home/usr000
LINUX Bsico (8. Shells(3)) 10

8.2(2) Uso de comentarios


El signo # le indica al shell el principio de un comentario. Cada
carcter a partir del signo # hasta el final de la lnea es parte de ese comentario. El shell ignora los comentarios. Un comentario es una nota para usted mismo o para cualquiera que lea el script.
[usr000@linuxpc usr000]$ cat donde3 #!/bin/bash # Esto es un comentario. whoami # Esto es un comentario tambin. hostname pwd [usr000@linuxpc usr000]$ ./donde3 usr000 linuxpc /home/usr000

LINUX Bsico (8. Shells(3))

11

8.2(3) Uso de variables


Variables son disponibles en scripts de shell: podemos asignar
[usr000@linuxpc usr000]$ cat donde4 #!/bin/bash # "donde4": una prueba de script de shell variable1=`whoami` variable2=`hostname`:`pwd`
Asignacin del valor al variable

un valor a un variable y acceder el valor guardad en la variable.

echo "Su nombre del usuario es $variable1." echo "Ahora usted est en $variable2."
Sustitucin del variable

[usr000@linuxpc usr000]$ ./donde4 Su nombre del usuario es usr000. Ahora usted est en linuxpc:/home/usr000.
LINUX Bsico (8. Shells(3)) 12

8.2(4) Uso del comando read


El comando read toma la siguiente lnea de entrada y la
asigna a una variable.
[usr000@linuxpc usr000]$ cat quien #!/bin/bash # "quien": Presenta quin es el usuario de su seleccin.
Suprime aparte

echo read grep

-n "Nombre del usuario: " Nombre de un variable usuario $usuario /home/copropiedad/cuenta.txt


Sustitucin del variable

[usr000@linuxpc usr000]$ ./quien Entrar de la teclado (+[Enter]) Nombre del usuario: usr000 usr000 Sugasawa Takashi

LINUX Bsico (8. Shells(3))

13

8.2(5) Uso del parmetros de lnea de comando


Podemos consultar los parmetros de lnea de comando con los
variables $1, $2, ..., $9.
[usr000@linuxpc usr000]$ cat quien2 #!/bin/bash # "quien2": Presenta quin es el usuario de su seleccin.
Primer parmetro

grep $1 /home/copropiedad/cuenta.txt
Esto es necesario.

[usr000@linuxpc usr000]$ ./quien2 usr000 usr000 Sugasawa Takashi $1 $0

$0: El nombre del comando. $*: Todos los parmetros. $#: El nmero de parmetros.
LINUX Bsico (8. Shells(3)) 14

8.3 Programacin con control


(1) Uso de la estructura if
if comando then ... else ... fi es una estructura de decisin que
le permite seleccionar uno de dos cursos de accin basados en el resultado de un comando.

if comando then ... else ... fi

Si el resultado del comando es 0, ... Si no, ... Todos los programas tienen su valor de resultado. Generalmente el valor 0 representa el estado de salida del programa con xito.

El estado de salida del comando ejecutado ltimamente, se puede saber con el variable "$?".
LINUX Bsico (8. Shells(3)) 15

(40) test Regresa un estado de salida de cero cuando lo que se prob fue cierto. (ej.) test -f FILE1 test $variable1 = STR1 test $variable2 -lt 10
-f FILE -d FILE STR1 = STR2 STR1 != STR2 INT1 -eq INT2 INT1 -ne INT2 INT1 -gt INT2 INT1 -ge INT2 INT1 -lt INT2 INT1 -le INT2 cierto si existe el fichero FILE y es regular. cierto si el fichero FILE es un directorio. cierto si la cadena STR1 es igual a la cadena STR2. no es igual cierto si el nmero INT1 es igual al nmero INT2. no es igual mayor que mayor que o igual menor que menor que o igual
LINUX Bsico (8. Shells(3)) 16

[usr000@linuxpc usr000]$ cat quien3 #!/bin/bash # "quien3": Presenta quin es el usuario de su seleccin.
El nmero de parmetros. if test $# -ge 1 Si el nmero de parmetros es mayor o igual que 1, ...

then grep $1 /home/copropiedad/cuenta.txt else echo read grep fi [usr000@linuxpc usr000]$ ./quien3 usr000 usr000 Sugasawa Takashi [usr000@linuxpc usr000]$ ./quien3 Nombre del usuario: usr000 usr000 Sugasawa Takashi -n "Nombre del usuario: " usuario $usuario /home/copropiedad/cuenta.txt

LINUX Bsico (8. Shells(3))

17

8.3(2) Uso de la estructura for


for nombre in palabras do... done es una estructura iterativa.
Un nombre del variable (ej.) $* *.txt a ab abc abcd `seq 1 10`

for i in $* Todos los parmetros. do ... por ejemplo, si hay 3 palabras, $i se repite 3 veces. ... done Podemos acceder cada palabra as.

LINUX Bsico (8. Shells(3))

18

[usr000@linuxpc usr000]$ cat quien4 #!/bin/bash # "quien4": Presenta quin es el usuario de su seleccin. if test $# -ge 1 then for i in $* do grep $i /home/copropiedad/cuenta.txt done else echo -n "Nombre del usuario: " read usuario grep $usuario /home/copropiedad/cuenta.txt fi [usr000@linuxpc usr000]$ ./quien4 Nombre del usuario: usr000 usr000 Sugasawa Takashi [usr000@linuxpc usr000]$ ./quien4 usr000 usr000 Sugasawa Takashi [usr000@linuxpc usr000]$ ./quien4 usr000 usr001 usr000 Sugasawa Takashi usr001 Acosta Alonzo Jessica Elizabeth
LINUX Bsico (8. Shells(3)) 19

8.4 Procesos de scripts de shell


Aqu hay un script de shell ...
[usr000@linuxpc 8vo]$ cat ej_cd #!/bin/bash # "cd" en el script de shell echo -n "pwd: " pwd echo "cd /:" cd / echo -n "pwd: " pwd [usr000@linuxpc 8vo]$ pwd /home/usr000/8vo [usr000@linuxpc 8vo]$ ./ej_cd pwd: /home/usr000/8vo cd /: pwd: / [usr000@linuxpc 8vo]$ pwd /home/usr000/8vo Antes de ejecutar el script En el script, se ejecuta el comando "cd", y ciertamente se ha cambiado el directorio de trabajo actual. despus de ejecutar el script pero, no se ha cambiado...
20

En el script de shell, se ejecuta el comando "cd".

LINUX Bsico (8. Shells(3))

Normalmente el script de shell se ejecuta en el otro


proceso. Las operaciones en el una proceso no ejercen influencia sobre otros procesos.
Proceso de Shell ./ej_cd espera Proceso de otro shell cd /

LINUX Bsico (8. Shells(3))

21

Utilizando el comando "source", se ejecuta el script de


shell en el mismo proceso.
[usr000@linuxpc 8vo]$ pwd /home/usr000/8vo [usr000@linuxpc 8vo]$ source ej_cd pwd: /home/usr000/8vo cd /: pwd: / [usr000@linuxpc /]$ pwd / Esta vez, se ha cambiado el directorio de trabajo actual. source ej_cd cd / ". ej_cd" tambin tiene mismo efecto.

Proceso de Shell

LINUX Bsico (8. Shells(3))

22

8.5 Ajuste del ambiente del shell


Los cambios del ambiente del shell (umask, variables)
no tienen su efecto despus de la terminacin del proceso. Al registrarse la prxima vez, tenemos que hacerlos otra vez. Podemos escribirlos en el archivo .bashrc en el directorio base, que el bash ejecuta automticamente al iniciar.
.bash_profile .bashrc

[usr001@linuxpc usr001]$ ls -a ~ . .. .bash_history .bash_logout .gtkrc

Al hacer logout, se ejecuta. Al hacer login, se ejecutan. Cuando el bash inicia como un shell interactivo, se ejecuta.
LINUX Bsico (8. Shells(3)) 23

Ejemplo de .bashrc
[usr001@linuxpc ~]$ cat ~/.bashrc # .bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi umask 022 PS1="[\u@\h \w]\$ " alias ll='ls -l' alias la='ls -a' Asigna el valor del umask. Cambia el formato del indicador del shell. Definen alias del comando

Los cambios van a tener su efecto, cuando se inicia el shell la prxima vez. Tenemos que chequear el archivo antes de rehacer Login.
LINUX Bsico (8. Shells(3)) 24

Muchas gracias por su atencin ! Hasta pronto !

LINUX Bsico (8. Shells(3))

25

También podría gustarte