clase7-shell1

5
Shell es el intérprete de comandos, es decir, como los ordenadores no entienden nuestro lenguaje (sólo saben de ceros y unos), necesitaremos un programa intermedio, capaz de hacer que cuando nosotros tecleemos alguna orden, nuestro ordenador sea capaz de entenderlo. Es decir proporciona comunicación directa entre el usuario y el sistema operativo. ¿Qué es un Shell Script? Normalmente, usamos el término Shell Script para referirnos a programas escritos para la shell de UNIX/LINUX, mientras que cuando usamos la línea de comandos de MS-DOS (COMMAND.COM) o el cmd.exe de Windows, nos referimos como Batch files (archivos por lotes) y los guardaremos con extensión .bat. La programación en shell-scripting es muy útil para resolver tareas repetitivas, típicas de los Administradores. Son ficheros de texto que contienen comandos y son directamente ejecutables por el sistema. Un script tiene cierta similutud con un programa, pero existen diferencias. Generalmente los scripts son archivos que contienen en formato texto, los comandos o generalmente, las instrucciones que la aplicación ayudante ejecutará. Para escribir un script, necesitamos: 1.Escribir los comandos del shell en un archivo de texto 2.Hacer el archivo ejecutable (chmod +x archivo) 3. Escribir el nombre del archivo en la líena de comandos.

Upload: alexistorres

Post on 26-Jan-2016

212 views

Category:

Documents


0 download

DESCRIPTION

hgjygftdrfezxfjlihjku

TRANSCRIPT

Page 1: Clase7-SHELL1

Shell es el intérprete de comandos, es decir, como los ordenadores no entienden nuestro lenguaje (sólo saben de ceros

y unos), necesitaremos un programa intermedio, capaz de hacer que cuando nosotros tecleemos alguna orden, nuestro

ordenador sea capaz de entenderlo. Es decir proporciona comunicación directa entre el usuario y el sistema operativo.

¿Qué es un Shell Script?Normalmente, usamos el término Shell Script para referirnos a programas escritos para la shell de UNIX/LINUX,mientras que cuando usamos la línea de comandos de MS-DOS (COMMAND.COM) o el cmd.exe de Windows, nosreferimos como Batch files (archivos por lotes) y los guardaremos con extensión .bat.

La programación en shell-scripting es muy útil para resolver tareas repetitivas, típicas de los Administradores. Sonficheros de texto que contienen comandos y son directamente ejecutables por el sistema.

Un script tiene cierta similutud con un programa, pero existen diferencias. Generalmente los scripts son archivos quecontienen en formato texto, los comandos o generalmente, las instrucciones que la aplicación ayudante ejecutará.

Para escribir un script, necesitamos:

1.Escribir los comandos del shell en un archivo de texto

2.Hacer el archivo ejecutable (chmod +x archivo)

3. Escribir el nombre del archivo en la líena de comandos.

Page 2: Clase7-SHELL1

Todos los programas invocados mediante un shell poseen tres ficheros predefinidos, especificados por loscorrespondientes descriptores de ficheros (file handles). Por defecto, estos ficheros son:

1) standard input (entrada estándar): normalmente asignada al teclado del terminal (consola); usa el descriptor número0 (en UNIX los ficheros utilizan descriptores enteros).

2) standard output (salida estándar): normalmente asignada a la pantalla del terminal; usa el descriptor 1.

3) standard error (salida estándar de errores): normalmente asignada a la pantalla del terminal; utiliza el descriptor 2.

Esto nos indica que cualquier programa ejecutado desde el shell tendrá por defecto la entrada asociada al teclado delterminal, su salida hacia la pantalla y, en el caso de producirse errores, también los envía a la pantalla.

Además, los shells suelen proporcionar los tres mecanismos siguientes:

1) Redirección: dado que los dispositivos de E/S y los ficheros se tratan de la misma manera en UNIX, el shell los trataa todos simplemente como ficheros. Desde el punto de vista del usuario, se pueden redefinir los descriptores de losficheros para que los flujos de datos de un descriptor vayan a cualquier otro descriptor; a esto se le llama redirección.Por ejemplo, nos referiremos a la redirección de los descriptores 0 o 1 como a la redirección de la E/S estándar.

2) Tuberías (pipes): la salida estándar de un programa puede usarse como entrada estándar de otro por medio depipes. Varios programas pueden ser conectados entre sí mediante pipes para formar lo que se denomina un pipeline.

3) Concurrencia de programas de usuario: los usuarios pueden ejecutar varios programas simultáneamente,indicando que su ejecución se va a producir en segundo plano ( background), en términos opuestos a primer plano (oforeground), donde se tiene un control exclusivo de pantalla. Otra utilización consiste en permitir trabajos largos ensegundo plano cuando interactuamos con el shell con otros programas en primer plano.

Cabe hacer algunas observaciones, si queremos utilizar otro tipo de shell para que el interprete de comandos, debemoscolocar como primera línea en el archivo de texto el nombre del shell; por ejemplo si nuestros comandos seráninterpretados por el shell ksh, entonces colocamos como primera línea: #!/bin/ksh

OBSERVACIÓN 1:

Todos los scripts Bash tienen que comenzar con la línea:

#!/bin/bash

Esta línea le indica al shell usado por el usuario, el que tengamos activo en el momento, con qué shell hay que ejecutar el script que aparezca a continuación.

OBSERVACIÓN 2:

El script puede ejecutarse de dos modos diferentes:

1) Por ejecución directa desde la línea de comandos, siempre que tenga permiso de ejecución. Si no se da el caso, ponemos el permiso con: chmod +x script.sh

2) Por ejecución mediante el shell, llamamos al shell explícitamente: bash script.sh

Hay que tener en cuenta que, sea cuál sea el método de ejecución, siempre estamos creando un subshell donde se va a ejecutar nuestro script.

Page 3: Clase7-SHELL1

Ejemplos:

1.- Ahora vamos a crear un script al cual llamaremos prueba.sh:

#!/bin/bash# Esta línea será ignorada# Esta tambiénecho “Hola” echo “Soy un script de shell...”

2.- Vamos ahora a crear otro script que nos muestre el día y hora.

#!/bin/bashecho “El dia de hoy es: ”date

3.- Listamos el directorio /etc/

#!/bin/bashecho “Los archivos del directorio ETC son: ”ls -la /etc

4.- Vamos a mostrar en pantalla el nombre del usuario “abaco”:

#!/bin/bashecho “Hola\n Me llamo Abaco”

Obs:Los caracteres no imprimibles son:\n Introduce un salto de línea en la frase\c Continúa en la misma línea.\e Carácter Escape.\t Escribe un tabulador.

Ahora usaremos variables para crear los scripts, esto nos ayudará a manter un orden y no escribir lineas y lineas de“codigo”.

1.- Crearemos el script “hola.sh” con el siguiente contenido:

#!/bin/bash#Declaramos la variable stringstring=”Hola clase Abaco”echo $string

2.- Crearemos un script que muestre la fecha actual:#!/bin/bash#Declaramos la variable DAY que alberga al comando date con sus respectivas expresiones#Y es para año, M es para Mes, y d es para día.DAY=`date '+%Y-%m-%d'`echo “El dia de hoy es: $DAY”

3.- Si queremos mostrar la fecha de hace 5 días:#!/bin/bashDAY=`date --date='- 5 day' '+%Y-%m-%d'`echo “Hace 5 días fue: $DAY”

4.- Vamos a crear un backup para la carpeta opt y lo vamos a comprimir:#!/bin/bash#DIR es la variable que usamos en referencia al directorio backupDIR=backup-opt_$(date +%Y%m%d).tarecho “Ejecutando el backup de opt”tar -cvf $DIR /opt/echo “Comprimiendo el backup”gzip -q $DIRecho “Proceso de backup finalizado...”

Page 4: Clase7-SHELL1

ACOTACIONES

Como ya ha visto en los ejemplos anteriores, las variables del shell se definen automáticamente en el momento que lesasignamos algo por primera vez y su contenido es siempre el de una tira de caracteres.

$ A=hola #es importante no dejar blancos en lados del igual

$ echo $A

Con el bash podemos hacer operaciones sobre las variables cuando su contenido se pueda interpretar numéricamente,para ello podemos utilizar el operador let seguido de una expresión conforme con la sintaxis de C que se interpretacomo enteros:

$ A=5

$ let A=A+1

$ echo $A

Alternativamente podemos poner una expresión tipo C encerrada entre $[ y ], por ejemplo:

$ A=5

$ A=$[A+1]

$ echo $A

También podemos hacer uso de las comillas de ejecución para asignar el resultado de cualquier programa a unavariable, por ejemplo, expr acepta como parámetros expresiones y escribe en pantalla el resultado de estas. Ejem.

Probar lo siguiente:

$ A=5

$ expr $A + 1

Y ahora,

$ A=`expr $A + 1`

$ echo $A

Recordar que cada proceso que ejecuta un shell tiene su propia copia de estas variables de entorno, por lo que loscambios en una variable que haga un proceso sólo afectan a los procesos que ese proceso cree con posterioridad alcambio.

Page 5: Clase7-SHELL1

LABORATORIO 7 : SHELL SCRIPTING

1.- Crea un script que muestre las particiones del servidor.2.- Crea un script que muestre los usuarios conectados en el servidor.3.- Crea un script que reinicie el sericio network.4.- Crea un script que sume los números 2 y 5. (puedes usar variables)5.- Crea un script que reste los números 10 y 2 (puedes usar variables)6.- Crea un script que multiplique los números 100 y 250 (puedes usar variables)7.- Crea un script que muestre en pantalla el ID del usuario abaco.8.- Crea un script que muestre en pantalla la información que hay en el fichero /etc/passwd9.- Crea un script que cree la carpeta bash en el directorio /usr/share/clase/10.- Crea un script que permita cambiar el password al usuario “abaco”.11.- Crea un script que muestre en pantalla el grupo al que pertenece el usuario “abaco”. 12.- Crea un script que cambie el password del usuario abaco.13.- Crea un script que renombre la carpeta prueba a linux (usa como directorio base /opt)14.- Crea un script que realiza un ping de 10 intervalos a google15.- Crea un script de backup para la carpeta /opt/data, el backup debe contener la fecha del dia de hoy, a su vez, crea un cron para que se ejecute todos los viernes a las 8pm.16.- Crea un script que muestre el siguiente mensaje en pantall “Hola usuario $conectado” donde “conectado” es el usuario que ha iniciado sesion remota en el sistema.17.- Crea un script que copie el contenido de la carpeta /opt/ a la carpeta /usr/share/clasedehoy, al final debe imprimirse en pantalla “copia terminada”18.- Crear un script de Shell que liste únicamente los nombres de los directorios que se encuentran a partir del directorioactual.19.- Crea un script que borre todo el contenido de la carpeta /usr/share/clasedehoy.20.- Crea un script que capture el PID del servicio postfix, luego debe detener el proceso usando kill.