40 Ejemplos sencillos y eficaces de scripts de shell para Linux

Históricamente, el shell ha sido el intérprete de línea de comandos nativo de los sistemas tipo Unix. Ha demostrado ser una de las principales características de Unix a lo largo de los años y creció hasta convertirse en todo un tema en sí mismo. Linux ofrece una variedad de poderosos shells con funcionalidad robusta, incluyendo Bash, Zsh, Tcsh, y Ksh. Una de las características más asombrosas de estos shells es su programabilidad. Crear scripts de shell Linux sencillos pero eficaces para abordar las tareas cotidianas es bastante fácil. Además, un modesto conocimiento sobre este tema te convertirá en un usuario avanzado de Linux en poco tiempo. Quédese con nosotros para una introducción detallada a los scripts de shell de Unix.

Ejemplos de scripts de shell de Linux

La mayoría de los scripts de shell realizados en Linux implican el shell bash. Los usuarios avanzados que han especificado opciones, a menudo utilizan otros shells como Zsh y Ksh. Nos ceñiremos principalmente a los scripts bash de Linux en nuestros ejemplos debido a su amplia popularidad e inmensa usabilidad. Nuestros editores también han tratado de esbozar algunos ejemplos de scripts de shell que tratan con shells diferentes a bash. Usted encontrará una cantidad sustancial de familiaridad entre los diferentes scripts de shell.

Linux Bash Scripts

Bash aka the Bourne Again Shell es el intérprete de línea de comandos por defecto en la mayoría de las distros de Linux hoy en día. Es una actualización del anterior shell Bourne que fue introducido por primera vez en la versión 7 de Unix. Aprender el shell bash te permitirá entender otros scripts del shell mucho más rápido. Así que, pruebe usted mismo estos sencillos ejemplos para ganar experiencia de primera mano.

1. Hola Mundo

Los programadores suelen aprender nuevos lenguajes a través del aprendizaje del programa hola mundo. Es un programa sencillo que imprime la cadena «Hola Mundo» en la salida estándar. Utilice un editor como vim o nano para crear el archivo hello-world.sh y copiar las siguientes líneas en él.

#!/bin/bashecho "Hello World"

Guardar y salir del archivo. Necesitas hacer este archivo ejecutable usando el comando de abajo.

$ chmod a+x hello-world.sh

Puedes ejecutar esto usando cualquiera de los dos comandos de abajo.

$ bash hello-world.sh$ ./hello-world.sh

Imprimirá la cadena pasada a echo dentro del script.

2. Usando echo para imprimir

El comando echo se usa para imprimir información en bash. Es similar a la función C ‘printf’ y proporciona muchas opciones comunes, incluyendo secuencias de escape y redireccionamiento.

Copie las siguientes líneas en un archivo llamado echo.sh y hágalo ejecutable como se hizo anteriormente.

#!/bin/bashecho "Printing text"echo -n "Printing text without newline"echo -e "\nRemoving \t special \t characters\n"

Ejecute el script para ver lo que hace. La opción -e se utiliza para decirle a echo que la cadena que se le pasa contiene caracteres especiales y requiere una funcionalidad extendida.

3. Uso de comentarios

Los comentarios son útiles para la documentación y son un requisito para las bases de código de alta calidad. Es una práctica común poner comentarios dentro de los códigos que se ocupan de la lógica crítica. Para comentar una línea, sólo tienes que usar el carácter #(hash) antes de ella. Mira el siguiente ejemplo de script bash.

#!/bin/bash# Adding two values((sum=25+35))#Print the resultecho $sum

Este script mostrará el número 60. Comprueba cómo se usan los comentarios usando # antes de algunas líneas. La primera línea es una excepción. Se llama shebang y permite al sistema saber qué intérprete usar cuando se ejecuta este script.

4. Comentarios de varias líneas

Mucha gente usa comentarios de varias líneas para documentar sus scripts de shell. Comprueba cómo se hace en el siguiente script llamado comment.sh.

#!/bin/bash: 'This script calculatesthe square of 5.'((area=5*5))echo $area

Nota cómo los comentarios multilínea se colocan dentro de los caracteres :’ y ‘.

5. El bucle while

La construcción del bucle while se utiliza para ejecutar alguna instrucción varias veces. Echa un vistazo a la siguiente secuencia de comandos llamada while.sh para una mejor comprensión de este concepto.

#!/bin/bashi=0while doecho Number: $i((i++))done

Así, el bucle while toma la siguiente forma.

while docommands 1commands ndone

El espacio que rodea los corchetes son obligatorios.

6. El bucle For

El bucle for es otra construcción del shell bash ampliamente utilizada que permite a los usuarios iterar sobre los códigos de manera eficiente. A continuación se muestra un ejemplo sencillo.

#!/bin/bashfor (( counter=1; counter<=10; counter++ ))doecho -n "$counter "doneprintf "\n"

Guarda este código en un archivo llamado for.sh y ejecútalo con ./for.sh. No olvides hacerlo ejecutable. Este programa debería imprimir los números del 1 al 10.

7. Recibir entradas del usuario

Recibir entradas del usuario es crucial para implementar la interacción del usuario en sus scripts. El siguiente ejemplo de script de shell demostrará cómo recibir la entrada del usuario dentro de un programa de shell.

#!/bin/bashecho -n "Enter Something:"read somethingecho "You Entered: $something"

Así, la construcción de lectura seguida de un nombre de variable, se utiliza para obtener la entrada del usuario. La entrada se almacena dentro de esta variable y se puede acceder a ella utilizando el signo $.

8. La sentencia If

Las sentencias If son la construcción condicional más común disponible en los scripts del shell de Unix, tienen la forma que se muestra a continuación.

if CONDITION thenSTATEMENTSfi

Las sentencias sólo se ejecutan si la CONDICIÓN es verdadera. La palabra clave fi se utiliza para marcar el final de la sentencia if. Un ejemplo rápido se muestra a continuación.

#!/bin/bashecho -n "Enter a number: "read numif ]thenecho "Number is greater than 10."fi

El programa anterior sólo mostrará la salida si el número proporcionado a través de la entrada es mayor que diez. El -gt significa mayor que; similarmente -lt para menor que; -le para menor que igual; y -ge para mayor que igual. Los ] son necesarios.

9. Más control usando If Else

Combinar la construcción else con if permite un control mucho mejor sobre la lógica de su script. A continuación se muestra un ejemplo sencillo.

#!/bin/bashread nif ;thenecho "It is a one digit number"elseecho "It is a two digit number"fi

La parte else debe colocarse después de la parte de acción de if y antes de fi.

10. Uso del operador AND

El operador AND permite que nuestro programa compruebe si se cumplen varias condiciones a la vez o no. Todas las partes separadas por un operador AND deben ser verdaderas. En caso contrario, la sentencia que contiene el AND devolverá falso. Compruebe el siguiente ejemplo de script bash para entender mejor cómo funciona AND.

#!/bin/bashecho -n "Enter Number:"read numif ]; thenecho "Even Number"elseecho "Odd Number"fi

El operador AND se denota con el signo &&.

11. Uso del operador OR

El operador OR es otra construcción crucial que nos permite implementar una lógica de programación compleja y robusta en nuestros scripts. Al contrario que AND, una sentencia consistente en el operador OR devuelve verdadero cuando cualquiera de sus operandos es verdadero. Sólo devuelve falso cuando cada operando separado por el OR es falso.

#!/bin/bashecho -n "Enter any number:"read nif ]thenecho "You won"elseecho "You lost!"fi

Este sencillo ejemplo demuestra cómo funciona el operador OR en los scripts del shell de Linux. Declara al usuario como ganador sólo cuando introduce el número 15 o 45. El signo || representa el operador OR.

12. Uso de Elif

La sentencia elif significa else if y ofrece un medio conveniente para implementar la lógica en cadena. Descubra cómo funciona elif evaluando el siguiente ejemplo.

#!/bin/bashecho -n "Enter a number: "read numif ]thenecho "Number is greater than 10."elif ]thenecho "Number is equal to 10."elseecho "Number is less than 10."fi

El programa anterior se explica por sí mismo, así que no lo diseccionaremos línea por línea. Cambie partes del script como los nombres y valores de las variables para comprobar cómo funcionan en conjunto.

13. La construcción de conmutación

La construcción de conmutación es otra poderosa característica ofrecida por los scripts bash de Linux. Se puede utilizar cuando se requieren condiciones anidadas, pero no se desea utilizar complejas cadenas if-else-elif. Eche un vistazo al siguiente ejemplo.

#!/bin/bashecho -n "Enter a number: "read numcase $num in100)echo "Hundred!!" ;;200)echo "Double Hundred!!" ;;*)echo "Neither 100 nor 200" ;;esac

Las condiciones se escriben entre las palabras clave case y esac. El *) se utiliza para hacer coincidir todas las entradas que no sean 100 y 200.

14. Argumentos de la línea de comandos

Obtener argumentos directamente del shell de comandos puede ser beneficioso en varios casos. El siguiente ejemplo demuestra cómo hacer esto en bash.

#!/bin/bashecho "Total arguments : $#"echo "First Argument = "echo "Second Argument = "

Ejecuta este script con dos parámetros adicionales después de su nombre. Lo he llamado test.sh y el procedimiento de llamada se describe a continuación.

$ ./test.sh Hey Howdy

Así, $1 se utiliza para acceder al primer argumento, $2 para el segundo, y así sucesivamente. El $# se utiliza para obtener el número total de argumentos.

15. Obtención de argumentos con nombres

El siguiente ejemplo muestra cómo obtener los argumentos de la línea de comandos con sus nombres.

#!/bin/bashfor arg in "$@"doindex=$(echo $arg | cut -f1 -d=)val=$(echo $arg | cut -f2 -d=)case $index inX) x=$val;;Y) y=$val;;*)esacdone((result=x+y))echo "X+Y=$result"

Nombre este script test.sh y llámelo como se muestra a continuación.

$ ./test.sh X=44 Y=100

Debe devolver X+Y=144. Los argumentos aquí se almacenan dentro de ‘$@’ y el script los recupera utilizando el comando cut de Linux.

16. Concatenando cadenas

El procesamiento de cadenas es de extrema importancia para una amplia gama de scripts bash modernos. Afortunadamente, es mucho más cómodo en bash y permite una forma mucho más precisa y concisa de implementarlo. Vea el siguiente ejemplo para un rápido vistazo a la concatenación de cadenas en bash.

#!/bin/bashstring1="Ubuntu"string2="Pit"string=$string1$string2echo "$string is a great resource for Linux beginners."

El siguiente programa emite la cadena «UbuntuPit es un gran recurso para los principiantes de Linux.» a la pantalla.

17. Cortar cadenas

Al contrario que muchos lenguajes de programación, bash no proporciona ninguna función incorporada para cortar porciones de una cadena. El siguiente ejemplo demuestra cómo se puede hacer esto utilizando la expansión de parámetros.

#!/bin/bashStr="Learn Bash Commands from UbuntuPit"subStr=${Str:0:20}echo $subStr

Este script debería imprimir «Learn Bash Commands» como su salida. La expansión de parámetros tiene la forma ${VAR_NAME:S:L}. Aquí, S denota la posición inicial y L indica la longitud.

18. Extracción de subcadenas usando Cut

El comando cut de Linux puede ser usado desde dentro de sus scripts para ‘cortar’ una porción de una cadena, alias la subcadena. El siguiente ejemplo muestra cómo se puede hacer esto.

#!/bin/bashStr="Learn Bash Commands from UbuntuPit"#subStr=${Str:0:20}subStr=$(echo $Str| cut -d ' ' -f 1-3)echo $subStr

Consulte esta guía para entender cómo funciona el comando Cut de Linux.

19. Sumar dos valores

Es bastante fácil realizar operaciones aritméticas dentro de los scripts del shell de Linux. El siguiente ejemplo demuestra cómo recibir dos números como entrada del usuario y sumarlos.

#!/bin/bashecho -n "Enter first number:"read xecho -n "Enter second number:"read y(( sum=x+y ))echo "The result of addition=$sum"

Como puede ver, sumar números en bash es razonablemente sencillo.

20. Añadir múltiples valores

Puedes utilizar bucles para obtener múltiples entradas de usuario y añadirlas dentro de tu script. Los siguientes ejemplos muestran esto en acción.

#!/bin/bashsum=0for (( counter=1; counter<5; counter++ ))doecho -n "Enter Your Number:"read n(( sum+=n ))#echo -n "$counter "doneprintf "\n"echo "Result is: $sum"

Sin embargo, omitir el (( )) resultará en la concatenación de cadenas en lugar de la adición. Por lo tanto, compruebe si hay cosas como ésta en su programa.

21. Funciones en Bash

Como en cualquier dialecto de programación, las funciones juegan un papel esencial en los scripts del shell de Linux. Permiten a los administradores crear bloques de código personalizados para su uso frecuente. La siguiente demostración esbozará cómo funcionan las funciones en los scripts bash de Linux.

#!/bin/bashfunction Add(){echo -n "Enter a Number: "read xecho -n "Enter another Number: "read yecho "Adiition is: $(( x+y ))"}Add

Aquí hemos añadido dos números igual que antes. Pero aquí hemos hecho el trabajo usando una función llamada Add. Así, cada vez que necesites volver a sumar, sólo tienes que llamar a esta función en lugar de volver a escribir esa sección.

22. Funciones con valores de retorno

Una de las características más fantásticas de las funciones es que permiten pasar datos de una función a otra. Es útil en una gran variedad de escenarios. Mira el siguiente ejemplo.

#!/bin/bashfunction Greet() {str="Hello $name, what brings you to UbuntuPit.com?"echo $str}echo "-> what's your name?"read nameval=$(Greet)echo -e "-> $val"

Aquí, la salida contiene datos recibidos de la función Greet().

23. Creación de directorios a partir de scripts Bash

La posibilidad de ejecutar comandos del sistema mediante scripts de shell permite a los desarrolladores ser mucho más productivos. El siguiente ejemplo sencillo le mostrará cómo crear un directorio desde un script de shell.

#!/bin/bashecho -n "Enter directory name ->"read newdircmd="mkdir $newdir"eval $cmd

Si se fija bien, este script simplemente llama a su comando de shell estándar mkdir y le pasa el nombre del directorio. Este programa debería crear un directorio en tu sistema de archivos. También puede pasar el comando a ejecutar dentro de backticks(«) como se muestra a continuación.

`mkdir $newdir`

24. Crear un directorio después de confirmar su existencia

El programa anterior no funcionará si su directorio de trabajo actual ya contiene una carpeta con el mismo nombre. El siguiente programa comprobará la existencia de cualquier carpeta llamada $dir y sólo creará una si no encuentra ninguna.

#!/bin/bashecho -n "Enter directory name ->"read dirif thenecho "Directory exists"else`mkdir $dir`echo "Directory created"fi

Escribe este programa usando eval para aumentar tus habilidades de scripting en bash.

25. Lectura de archivos

Los scripts de bash permiten a los usuarios leer archivos de manera muy efectiva. El siguiente ejemplo mostrará cómo leer un archivo usando scripts de shell. Cree un archivo llamado editors.txt con el siguiente contenido.

1. Vim 2. Emacs 3. ed 4. nano 5. Code

Este script mostrará cada una de las 5 líneas anteriores.

#!/bin/bashfile='editors.txt'while read line; doecho $linedone < $file

26. Borrado de archivos

El siguiente programa demostrará cómo borrar un archivo dentro de los scripts del shell de Linux. El programa primero pedirá al usuario que proporcione el nombre del archivo como entrada y lo borrará si existe. El comando rm de Linux hace el borrado aquí.

#!/bin/bashecho -n "Enter filename ->"read namerm -i $name

Escribamos editors.txt como nombre de archivo y pulsemos y cuando se nos pida confirmación. Debería eliminar el archivo.

27. Añadir a los archivos

El siguiente ejemplo de script de shell le mostrará cómo añadir datos a un archivo en su sistema de archivos utilizando scripts bash. Añade una línea adicional a los editores anteriores.txt archivo.

#!/bin/bashecho "Before appending the file"cat editors.txtecho "6. NotePad++" >> editors.txtecho "After appending the file"cat editors.txt

Usted debe notar por ahora que estamos utilizando los comandos de terminal de todos los días directamente de Linux bash scripts.

28. Comprobar la existencia de un archivo

El siguiente ejemplo de script de shell muestra cómo comprobar la existencia de un archivo desde programas bash.

#!/bin/bashfilename=if ; thenecho "File exists"elseecho "File does not exist"fi

Estamos pasando el nombre del archivo como argumento desde la línea de comandos directamente.

29. Enviar correos desde scripts de Shell

Es bastante sencillo enviar correos desde scripts de bash. El siguiente ejemplo sencillo demostrará una forma de hacerlo desde aplicaciones bash.

#!/bin/bashrecipient="[email protected]"subject="Greetings"message="Welcome to UbuntuPit"`mail -s $subject $recipient <<< $message`

Enviará un correo electrónico al destinatario que contenga el asunto y el mensaje dados.

30. Parsing Date and Time

El siguiente ejemplo de script bash le mostrará cómo manejar fechas y horas usando scripts. El comando de fecha de Linux se utiliza para obtener la información necesaria, y nuestro programa hace el análisis sintáctico.

#!/bin/bashyear=`date +%Y`month=`date +%m`day=`date +%d`hour=`date +%H`minute=`date +%M`second=`date +%S`echo `date`echo "Current Date is: $day-$month-$year"echo "Current Time is: $hour:$minute:$second"

Ejecute este programa para ver cómo funciona. También, intente ejecutar el comando de fecha desde su terminal.

31. El comando Sleep

El comando sleep permite que su script de shell haga una pausa entre instrucciones. Es útil en un número de escenarios tales como la realización de trabajos a nivel de sistema. El siguiente ejemplo muestra el comando sleep en acción desde dentro de un script de shell.

#!/bin/bashecho "How long to wait?"read timesleep $timeecho "Waited for $time seconds!"

Este programa pausa la ejecución de la última instrucción hasta $tiempo segundos, que es proporcionado por el usuario en este caso.

32. El comando Wait

El comando wait se utiliza para pausar los procesos del sistema desde los scripts bash de Linux. Consulta el siguiente ejemplo para entender en detalle cómo funciona en bash.

#!/bin/bashecho "Testing wait command"sleep 5 &pid=$!kill $pidwait $pidecho $pid was terminated.

Ejecuta tú mismo este programa para comprobar cómo funciona.

33. Visualización del último archivo actualizado

A veces se puede necesitar encontrar el último archivo actualizado para ciertas operaciones. El siguiente programa sencillo nos muestra cómo hacer esto en bash usando el comando awk. Nos mostrará el último archivo actualizado o creado en nuestro directorio de trabajo actual.

#!/bin/bashls -lrt | grep ^- | awk 'END{print $NF}'

Para simplificar, evitaremos describir cómo funciona awk en este ejemplo. Usted puede simplemente copiar este código para conseguir la tarea realizada.

34. Añadir extensiones por lotes

El siguiente ejemplo aplicará una extensión personalizada a todos los archivos dentro de un directorio. Cree un nuevo directorio y coloque algunos archivos allí para fines de demostración. Mi carpeta tiene un total de cinco archivos, cada uno con el nombre de test seguido de (0-4). He programado este script para añadir (.UP) al final de los archivos. Puedes añadir cualquier extensión que quieras.

#!/bin/bashdir=for file in `ls /*`domv $file $file.UPdone

En primer lugar, no pruebes este script desde cualquier directorio normal; en su lugar, ejecútalo desde un directorio de prueba. Además, debe proporcionar el nombre del directorio de sus archivos como argumento de la línea de comandos. Utilice punto(.) para el directorio de trabajo actual.

35. Imprimir el número de archivos o directorios

El siguiente script bash de Linux encuentra el número de archivos o carpetas presentes dentro de un directorio dado. Utiliza el comando find de Linux para hacerlo. Es necesario pasar el nombre del directorio donde se desea buscar los archivos desde la línea de comandos.

#!/bin/bashif ; thenecho "Files found: $(find "$@" -type f | wc -l)"echo "Folders found: $(find "$@" -type d | wc -l)"elseecho " Please retry with another folder."exit 1fi

El programa pedirá al usuario que lo intente de nuevo si el directorio especificado no está disponible o tiene problemas de permisos.

36. Limpieza de archivos de registro

El siguiente ejemplo sencillo demuestra una forma práctica en la que podemos utilizar los scripts de shell en la vida real. Este programa simplemente borrará todos los archivos de registro presentes dentro de su directorio /var/log. Puede cambiar la variable que contiene este directorio para limpiar otros registros.

#!/bin/bashLOG_DIR=/var/logcd $LOG_DIRcat /dev/null > messagescat /dev/null > wtmpecho "Logs cleaned up."

Recuerde ejecutar este script de shell de Linux como root.

37. Script de copia de seguridad usando Bash

Los scripts de shell proporcionan una forma robusta de hacer copias de seguridad de sus archivos y directorios. El siguiente ejemplo hará una copia de seguridad de cada archivo o directorio que haya sido modificado en las últimas 24 horas. Este programa utiliza el comando find para hacer esto.

#!/bin/bashBACKUPFILE=backup-$(date +%m-%d-%Y)archive=${1:-$BACKUPFILE}find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar"echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."exit 0

Imprimirá los nombres de los archivos y directorios después de que el proceso de respaldo sea exitoso.

38. Comprobar si es root

El siguiente ejemplo demuestra una forma rápida de averiguar si un usuario es root o no desde los scripts bash de Linux.

#!/bin/bashROOT_UID=0if thenecho "You are root."elseecho "You are not root"fiexit 0

La salida de este script depende del usuario que lo ejecute. Coincidirá con el usuario root basándose en el $UID.

39. Eliminación de líneas duplicadas de archivos

El procesamiento de archivos toma un tiempo considerable y dificulta la productividad de los administradores de muchas maneras. La búsqueda de duplicados en sus archivos puede convertirse en una tarea desalentadora. Afortunadamente, usted puede hacer esto con un corto script de shell.

#! /bin/shecho -n "Enter Filename-> "read filenameif ; thensort $filename | uniq | tee sorted.txtelseecho "No $filename in $pwd...try again"fiexit 0

El script anterior va línea por línea a través de su archivo y elimina cualquier línea duplicada. Luego coloca el nuevo contenido en un nuevo archivo y mantiene el archivo original intacto.

40. Mantenimiento del sistema

A menudo uso un pequeño script de shell de Linux para actualizar mi sistema en lugar de hacerlo manualmente. El siguiente script de shell simple le mostrará cómo hacerlo.

#!/bin/bashecho -e "\n$(date "+%d-%m-%Y --- %T") --- Starting work\n"apt-get updateapt-get -y upgradeapt-get -y autoremoveapt-get autocleanecho -e "\n$(date "+%T") \t Script Terminated"

El script también se encarga de los paquetes antiguos que ya no son necesarios. Necesitas ejecutar este script usando sudo o no funcionará correctamente.

Pensamientos finales

Los scripts de shell de Linux pueden ser tan diversos como puedas imaginar. Literalmente no hay límite cuando se trata de determinar lo que puede hacer o no. Si eres un nuevo entusiasta de Linux, te recomendamos encarecidamente que domines estos ejemplos de scripts bash fundamentales. Deberías modificarlos para entender su funcionamiento con mayor claridad. Hemos hecho todo lo posible para proporcionarle todos los conocimientos esenciales necesarios para los scripts bash modernos de Linux. No hemos tocado algunos asuntos técnicos debido a la simplicidad. Sin embargo, esta guía debería ser un gran punto de partida para muchos de ustedes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.