Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Manual 1 Shell Scripts - Introducción, Apuntes de Competencias en Linux

En este manual se trabajan los siguientes contenidos: cómo escribir y ejecutar un script, uso de variables, comillas, comodines, comandos echo y read, operaciones aritméticas, redireccionamientos, tuberias, estado de salida de un comando, comando test, estructuras de control y funciones.

Tipo: Apuntes

2019/2020

Subido el 08/04/2020

nacho-s
nacho-s 🇪🇸

1 documento

1 / 21

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
MANUAL 1
SHELL SCRIPTS
INTRODUCCIÓN
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15

Vista previa parcial del texto

¡Descarga Manual 1 Shell Scripts - Introducción y más Apuntes en PDF de Competencias en Linux solo en Docsity!

MANUAL 1

SHELL SCRIPTS

INTRODUCCIÓN

    1. ¿Qué es la Shell de Linux?
    1. ¿Qué es un Shell script?
    1. Cómo escribir y ejecutar un script
    1. Mi primer script
    1. Variables
    • 5.1. Variables del sistema
    • 5.2. Variables especiales
    • 5.3. Variables definidas por el usuario
    • 5.4. Reglas para nombrar variables y asignarles valor
    1. Comillas
    1. Comodines
    1. Comandos echo y read
    • 8.1. echo
    • 8.2. read
    1. Operaciones aritméticas
    1. Redirección de Entrada/Salida
    1. Tuberías (pipes)
    1. Estado de salida de un comando
    1. Comando test ( [ ] )
    1. Estructuras de control de flujo
    • 14 .1. if
    • 14.2. while
    • 14.3. until
    • 14.4. for
    • 14.5. case
    1. Funciones

3. Cómo escribir y ejecutar un script

Los pasos necesarios para escribir y ejecutar un shell script son: (1) Usar cualquier editor como vi o gedit para escribir el script. Sintaxis: gedit nombre-script (2) Después de escribir el script, hay que darle permisos de ejecución de la siguiente manera: Sintaxis: chmod permiso nombre-script Ejemplos: $ chmod +x nombre-script $ chmod 755 nombre-script Nota: Esto establecerá el permiso de lectura, escritura y ejecución (7) para el propietario, y para el grupo y el resto de usuarios solo permisos de lectura y ejecución (5). (3) Ejecuta el script de la siguiente forma: Sintaxis: ./nombre-script Ejemplos: $ ./miscript.sh Consejo: Los archivos de shell script guárdalos con la extensión .sh, de manera que facilite la identificación de este tipo de archivos.

4. Mi primer script

Ya estamos listo para escribir nuestro primer shell script (holamundo.sh) que imprimirá en pantalla el mensaje “Hola mundo!”. Ejecuta el siguiente comando para abrir el editor de texto: $ gedit holamundo.sh Escribe el siguiente shell script: #!/bin/bash

Mi primer shell script

clear echo "Hola mundo!" Explicación del código del script línea a línea: Comando Significado #!/bin/bash El sha-bang (#!) al comienzo de un script indica al sistema que el archivo va a ser interpretado por un determinado intérprete. En este caso por /bin/bash. Todos los scripts deben empezar por esta línea. Hay otros intérpretes como /bin/sh, /bin/ksh pero nosotros utilizaremos /bin/bash para nuestros scripts.

Mi primer shell script

seguido de cualquier texto se considera un

comentario y no será interpretado. Los comentarios sirven para proporcionar más información sobre el script, explicar partes del código, etc. clear Limpia la pantalla echo "Hola mundo!" Imprime el mensaje “Hola mundo” en pantalla. Para imprimir un texto en pantalla se utiliza el comando echo. Después guarda el script y dale permisos de ejecución $ chmod 755 holamundo.sh Finalmente ejecuta el script: $ ./holamundo.sh

5.2. Variables especiales

Variable Significado $0 el nombre del script. $1…$9 Corresponde a los primeros 9 parámetros con los que se llamó el script. $# Número de parámetros con los que se ha invocado el script. Es muy útil para comprobar el número de argumentos pasados en la ejecución de un Shell script. $* Los parámetros pasados al script. $@ Los parámetros pasados al script. $$ El PID de la shell. $? Estado de salida del último comando o script ejecutado.

5.3. Variables definidas por el usuario

Para definir variables y asignar sus valores se utiliza la siguiente sintaxis: nombre_variable= 3 Para imprimir o acceder al valor de una variable, basta con colocar el símbolo del dólar ($) por delante del nombre de la variable echo $nombre_variable

5.4. Reglas para nombrar variables y asignarles valor

A. El nombre de la variable debe comenzar con un carácter alfanumérico o un carácter de subrayado (_), seguido de uno o más caracteres alfanuméricos. Ejemplos: nombre, miVar, etc. B. No poner espacios a ambos lados del signo igual (=) cuando asigne un valor a la variable. Las siguientes asignaciones son erróneas: var = var= 10 var = 10 C. Las variables distinguen entre mayúsculas y minúsculas. Las siguientes variables son diferentes: var= Var=1 1 vAr=

6. Comillas

Hay tres tipos de comillas Comillas Nombre Significado " Comillas dobles Dentro de las comillas dobles todos los caracteres son interpretados literalmente. Excepto algunos de ellos que si son interpretados ( $, , ). ' Comillas simples Dentro de las comillas simples todos los caracteres son interpretados literalmente. Es decir, ninguno de los caracteres especiales conserva su significado dentro de las comillas simples. Comilla invertida Se utilizan para ejecutar comandos. Es decir, ejecuta el comando y sustituye la cadena por su salida. Ejemplo: echo date

7. Comodines

Hay una serie de caracteres que se pueden utilizar como comodines y que pueden sustituir a otros caracteres o conjuntos de caracteres. Comodín Significado Ejemplos *** Coincide con cualquier cadena o grupo de caracteres. ls * Muestra todos los archivos ls a Muestra todos los archivos cuya primera letra empiece por 'a' ls .c Muestra todos los archivos que tengan la extensión .c ls ut.c Muestra todos los archivos que tengan la extensión .c y cuyo nombre empiece por las letras 'ut'. ? Coincide con cualquier carácter individual. ls? Muestra todos los archivos cuyo nombre consta de un solo carácter. ls fo? Muestra todos los archivos cuyo nombre tienen tres caracteres y comienzan por 'fo' [...] Coincide con cualquiera de los caracteres entre corchetes ls [abc] Muestra todos los archivos cuyo nombre empiece por las letras a, b y c.

8. Comandos echo y read

8.1. echo

El comando echo imprime en pantalla el texto que se le pasa. Sintaxis: echo [opciones] cadenas Ejemplo: $ echo “Hola ¿Qué tal?” Hola ¿Qué tal? Opciones

  • n No imprime carácter final de nueva línea
  • e Interpreta los siguientes caracteres de escape: \a Alerta (reproduce un pitido) \b Retroceso \c No imprime la nueva línea final (igual que - n) \n Salto de línea (nueva línea) \r Retorno de carro \t Tabulación horizontal \v Tabulación vertical \ Una barra invertida \’ Comillas simples \” Comillas dobles Ejemplo: #Imprime de forma literal lo que hay entre las comillas $ echo “\tHola” \tHola #Imprime Hola con una tabulación horizontal $ echo – e “\tHola” Hola

8.2. read

Se usa para leer datos del usuario desde teclado y almacenarlos en variable. Sintaxis: read variable Ejemplo: El siguiente script primero pregunta al usuario el nombre y queda a la espera de que lo introduzca por teclado. Cuando el usuario introduce el nombre por teclado y pulsa la tecla intro, se almacena en la variable varnombre. #Ejemploread.sh #Script para leer tu nombre desde teclado

echo – n "Introduzca su nombre: " read varnombre echo "¡Hola $varnombre!" Al ejecutarlo: $ ./Ejemploread.sh Introduzca su nombre: Javier ¡Hola Javier! NOTA: Se puede utilizar el comando read con la opción – p para indicar en la misma línea el texto que se mostrará por pantalla. Ejemplo: read – p “Introduzca su nombre: ” varnombre #Es equivalente a:

echo – n "Introduzca su nombre: "

read varnombre

También podemos realizar operaciones aritméticas sin utilizar el comando expr. Para ello tenemos que definir variables numéricas utilizando el comando let. Ejemplo: #!/bin/bash let A= let B= let C=$A+$B echo "C= $C"

10. Redirección de Entrada/Salida

La mayoría de los comandos proporcionan la salida por pantalla o toman la entrada desde el teclado, pero es posible enviar la salida a un archivo o leer la entrada de un archivo. Es decir, el shell puede redirigir la entrada estándar (stdin), la salida estándar (stdout) y el error estándar (stderr) desde y hacia archivos. Símbolo redirección Sintaxis Significado < comando < archivo comando obtiene la entrada de archivo y no de teclado > comando > archivo Redirige la salida estándar a archivo. (Si archivo existe se sobrescribe y si no se crea) >> comando >> archivo Redirige la salida estándar a archivo. (Si archivo existe se añaden los datos al final del archivo.) 2> comando 2> archivo Redirige el error estándar a archivo &> comando &> archivo Redirige tanto la salida estándar como el error estándar a archivo Ejemplos: Redirecciona la salida del comando ls y la vuelca en archivo.txt $ ls > archivo.txt Sin embargo, cada vez que ejecutemos ese comando el contenido de archivo.txt será reemplazado por la salida del comando ls. Si queremos agregar la salida del comando al final del archivo, en lugar de reemplazarla, entonces ejecutamos: $ date >> archivo.txt

11. Tuberías (pipes)

Una tubería (pipe) permite redirigir la salida estándar de un comando para que se convierta en la entrada estándar de otro comando por medio del operador | Sintaxis: comando1 | comando 2 Ejemplos: Comandos con tuberías Significado de la tubería $ ls | more La salida del comando ls se envía como entrada al comando more, que la muestra de forma paginada. $ who | sort Envía la salida del comando who al comando sort e imprime una lista de usuarios conectados ordenada alfabéticamente. $ ls - l | wc - l La salida del comando ls se proporciona como entrada al comando wc para que imprima la cantidad de archivos en el directorio actual.

12. Estado de salida de un comando

Cuando se ejecuta un comando o un shell script, este devuelve un valor que se usa para determinar si se ha ejecutado correctamente o no.

  1. Si el valor de retorno es cero (0), el comando es exitoso.
  2. Si el valor de retorno es distinto de cero, el comando no ha tenido éxito o se ha producido algún tipo de error al ejecutar el comando / shell script. Este valor se conoce como estado de salida. Pero, ¿cómo averiguar el estado de salida de un comando o shell script? Para determinar este estado de salida se puede usar la variable especial $? Ejemplo: (Este ejemplo asume que miArchivo no existe) $ rm miArchivo Esto mostrará el siguiente error: rm: cannot remove 'miArchivo': No such file or directory Si justo después ejecutamos echo $? mostrará un valor distinto de cero, lo que indicará error. $ echo $? 1 Ejemplo: Esto mostrará los archivos y directorios que hay en el directorio actual. $ ls Si justo después ejecutamos echo $? mostrará cero (0), lo que indicará que el comando se ha ejecutado satisfactoriamente. $ echo $? 0

Combinar y negar expresiones t1 – a t2 (^) Las expresiones t1 y t2 son true t1 – o t2 (^) O expresión t1 o expresión t2 son true !t1 Cierto si la expresión t1 es false El comando test tiene un alias, [] (corchetes) como abreviatura para usarlo con condicionales y bucles. Las siguientes dos expresiones son equivalentes: $ test 10 – lt 5 $ [ 10 – lt 5 ]

14. Estructuras de control de flujo

14.1. if

La instrucción if elige entre alternativas. La forma más sencilla es la instrucción if-then: if comando #Si el estado de salida de comando es 0 then cuerpo fi Ejemplo: #!/bin/bash if [ whoami = root ] then echo “Tú eres el superusuario” fi Si queremos distinguir entre dos alternativas, se utiliza la instrucción if-then-else: if comando #Si el estado de salida de comando es 0 then cuerpo else cuerpo fi Ejemplo: #!/bin/bash if [ whoami = root ] then echo “Tú eres el superusuario” else echo “NO eres el superusuario” fi

Por último, la contrucción if-then-elif-else, puede considerar todas las alternativas que se desee: if comando then cuerpo elif comando then cuerpo elif ... then ... else cuerpoN fi

14.2. while

El bucle while repite una serie de comandos mientras una condición sea cierta. while comando #Mientras el estado de salida de comando sea 0 do cuerpo done Ejemplo: #!/bin/bash i= while [ $i – lt 3 ] do echo “$i” i=expr $i +1 done Al ejecutarlo obtenemos: $ ./while1.sh 0 1 2

El bucle for tiene también otra sintaxis posible mucho más parecida a la de los lenguajes de programación convencionales (Java,C,C++,etc.) for (( inicialización; condición; incremento )) do cuerpo done Ejemplo: Imprime los números del 1 al 10 #!/bin/bash for (( i=1; i<=10; i++ )) do echo “$i” done En la mayoría de los casos utilizaremos la primera sintaxis (la de iterar por los valores de una lista), aunque en ciertas ocasiones puede ser útil utilizar esta segunda sintaxis del bucle for.

14.5. case

La instrucción case es una buena alternativa a la instrucción if-else multinivel. Permite evaluar los diferentes valores que puede tomar una cadena y realizar diferentes acciones en cada caso. case cadena in expr1 ) cuerpo1 ;; expr2 ) cuerpo2 ;; ····· exprN) cuerpoN ;; *) cuerpoPorDefecto ;; esac donde cadena se compara con los diferentes patrones (expr1, expr2, …) hasta que se encuentra una coincidencia. El shell luego ejecuta todas las sentencias hasta los dos puntos y coma. El valor predeterminado es *) y se ejecuta si no se encuentra ninguna coincidencia. Ejemplo: #!/bin/bash read – p “Introduzca un carácter alfanumérico: ” caracter case $caracter in [A-Z]) echo “$caracter es una letra mayúscula” ;; [a-z]) echo “$caracter es una letra mayúscula” ;; [0-9]) echo “$caracter es un dígito” ;; *) echo “carácter no identificado” ;; esac