Introducción a Linux Shell y Shell Scripting

Si está utilizando cualquier sistema operativo principal, está interactuando indirectamente con Shell . Si está ejecutando Ubuntu, Linux Mint o cualquier otra distribución de Linux, está interactuando con Shell cada vez que usa la terminal. En este artículo, hablaré sobre los shells de Linux y las secuencias de comandos de shell, por lo que antes de comprender las secuencias de comandos de shell, debemos familiarizarnos con las siguientes terminologías:

  • Núcleo
  • Caparazón
  • Terminal

Que es Kernel

El núcleo es un programa de computadora que es el núcleo del sistema operativo de una computadora, con control completo sobre todo en el sistema. Gestiona los siguientes recursos del sistema Linux:

  • Gestión de archivos
  • Gestión de proceso
  • gestión de E/S
  • Gestión de la memoria
  • Gestión de dispositivos, etc

A menudo se confunde con que Linus Torvalds ha desarrollado el sistema operativo Linux, pero en realidad solo es responsable del desarrollo del kernel de Linux.

Sistema Linux completo = Kernel + bibliotecas y utilidades del sistema GNU + otros scripts de administración + scripts de instalación.

que es concha

Un shell es un programa de usuario especial que proporciona una interfaz para que el usuario utilice los servicios del sistema operativo. Shell acepta comandos legibles por humanos del usuario y los convierte en algo que el núcleo puede entender. Es un intérprete de lenguaje de comandos que ejecuta comandos leídos desde dispositivos de entrada como teclados o desde archivos. El shell se inicia cuando el usuario inicia sesión o inicia el terminal.

Cáscara de Linux

Shell se clasifica ampliamente en dos categorías:

  • Shell de línea de comandos
  • Concha gráfica

Shell de línea de comandos

El usuario puede acceder a Shell mediante una interfaz de línea de comandos. Se proporciona un programa especial llamado Terminal en linux/macOS o Símbolo del sistema en el sistema operativo Windows para escribir los comandos legibles por humanos como «cat», «ls», etc. y luego se ejecuta. A continuación, el resultado se muestra en el terminal al usuario. Una terminal en el sistema Ubuntu 16.4 se ve así:

línea de comandos de linux

En la captura de pantalla anterior, se ejecuta el comando » ls » con la opción » -l «.
Enumerará todos los archivos en el directorio de trabajo actual en formato de lista larga.
Trabajar con el shell de la línea de comandos es un poco difícil para los principiantes porque es difícil memorizar tantos comandos. Es muy potente, permite al usuario almacenar comandos en un archivo y ejecutarlos juntos. De esta manera, cualquier tarea repetitiva puede automatizarse fácilmente. Estos archivos generalmente se denominan archivos por lotes en Windows y Shell Scripts en sistemas Linux/macOS.

Conchas gráficas

Los shells gráficos proporcionan medios para manipular programas basados ​​en la interfaz gráfica de usuario (GUI), al permitir operaciones como abrir, cerrar, mover y cambiar el tamaño de ventanas, así como cambiar el enfoque entre ventanas. El sistema operativo Windows o el sistema operativo Ubuntu pueden considerarse un buen ejemplo que proporciona una GUI al usuario para interactuar con el programa. El usuario no necesita escribir un comando para cada acción. Una GUI típica en el sistema Ubuntu:

Shell de interfaz gráfica de usuario

Hay varios shells disponibles para sistemas Linux como:

  • BASH (Bourne Again SHell) : es el shell más utilizado en los sistemas Linux. Se utiliza como shell de inicio de sesión predeterminado en sistemas Linux y macOS. También se puede instalar en el sistema operativo Windows.
  • CSH (C SHell) : la sintaxis y el uso del shell C son muy similares al lenguaje de programación C.
  • KSH (Korn SHell) : Korn Shell también fue la base para las especificaciones estándar de POSIX Shell, etc.

Cada shell hace el mismo trabajo pero comprende diferentes comandos y proporciona diferentes funciones integradas.

Secuencias de comandos de shell

Por lo general, los shells son interactivos, lo que significa que aceptan comandos como entrada de los usuarios y los ejecutan. Sin embargo, en algún momento queremos ejecutar un montón de comandos de forma rutinaria, por lo que tenemos que escribir todos los comandos cada vez en la terminal.
Como Shell también puede tomar comandos como entrada desde un archivo, podemos escribir estos comandos en un archivo y ejecutarlos en Shell para evitar este trabajo repetitivo. Estos archivos se denominan Shell Scripts o Shell Programs . Los scripts de shell son similares al archivo por lotes en MS-DOS. Cada script de shell se guarda con la extensión de archivo .sh , por ejemplo. miscript.sh

Un script de shell tiene una sintaxis como cualquier otro lenguaje de programación. Si tiene alguna experiencia previa con cualquier lenguaje de programación como Python, C/C++, etc., sería muy fácil comenzar con él.

Un script de shell comprende los siguientes elementos:

  • Palabras clave de Shell: si, si no, romper, etc.
  • Comandos de shell: cd, ls, echo, pwd, touch, etc.
  • Funciones
  • Flujo de control: if..then..else, case y shell loops, etc.

¿Por qué necesitamos scripts de shell?

Hay muchas razones para escribir scripts de shell:

  • Para evitar el trabajo repetitivo y la automatización
  • Los administradores del sistema usan secuencias de comandos de shell para copias de seguridad de rutina
  • Monitoreo del sistema
  • Agregar nueva funcionalidad al shell, etc.

Ventajas de los scripts de shell

  • El comando y la sintaxis son exactamente los mismos que los ingresados ​​directamente en la línea de comando, por lo que el programador no necesita cambiar a una sintaxis completamente diferente
  • Escribir scripts de shell es mucho más rápido
  • Inicio rápido
  • Depuración interactiva, etc.

Desventajas de los scripts de shell

  • Propenso a errores costosos, un solo error puede cambiar el comando que podría ser dañino
  • Velocidad de ejecución lenta
  • Defectos de diseño en la sintaxis o implementación del lenguaje
  • No es adecuado para tareas grandes y complejas.
  • Proporcione una estructura de datos mínima a diferencia de otros lenguajes de secuencias de comandos. etc.

Demostración simple de secuencias de comandos de shell usando Bash Shell

Si trabajas en terminal, algo que recorres en el fondo de los directorios. Luego, para subir algunos directorios en la ruta, tenemos que ejecutar un comando como este como se muestra a continuación para llegar al directorio «python»:

 

Es bastante frustrante, entonces, ¿por qué no podemos tener una utilidad en la que solo tenemos que escribir el nombre del directorio y podemos saltar directamente a él sin ejecutar el comando » cd ../ » una y otra vez? Guarde el script como » jump.sh «

bash

# !/bin/bash
  
# A simple bash script to move up to desired directory level directly
  
function jump()
{
    # original value of Internal Field Separator
    OLDIFS=$IFS
  
    # setting field separator to "/"
    IFS=/
  
    # converting working path into array of directories in path
    # eg. /my/path/is/like/this
    # into [, my, path, is, like, this]
    path_arr=($PWD)
  
    # setting IFS to original value
    IFS=$OLDIFS
  
    local pos=-1
  
    # ${path_arr[@]} gives all the values in path_arr
    for dir in "${path_arr[@]}"
    do
        # find the number of directories to move up to
        # reach at target directory
        pos=$[$pos+1]
        if [ "$1" = "$dir" ];then
  
            # length of the path_arr
            dir_in_path=${#path_arr[@]}
  
            #current working directory
            cwd=$PWD
            limit=$[$dir_in_path-$pos-1]
            for ((i=0; i<limit; i++))
            do
                cwd=$cwd/..
            done
            cd $cwd
            break
        fi
    done
}

Por ahora no podemos ejecutar nuestro script de shell porque no tiene permisos. Tenemos que hacerlo ejecutable escribiendo el siguiente comando:

$chmod -x ruta/a/nuestro/archivo/jump.sh

Ahora, para que esté disponible en cada sesión de terminal, tenemos que poner esto en el archivo » .bashrc «.

.bashrc ” es un script de shell que ejecuta Bash shell cada vez que se inicia de forma interactiva. El propósito de un archivo .bashrc es proporcionar un lugar donde puede configurar variables, funciones y alias, definir nuestro mensaje y definir otras configuraciones que queremos usar cada vez que abrimos una nueva ventana de terminal.

Ahora abra la terminal y escriba el siguiente comando:

$echo “fuente ~/ruta/a/nuestro/archivo/jump.sh”>> ~/.bashrc

Ahora abra su terminal y pruebe la nueva funcionalidad de «salto» escribiendo el siguiente comando:

$saltar dir_name

al igual que la siguiente captura de pantalla:

 

Recursos para aprender Bash Scripting

Referencias:

Este artículo es una contribución de Atul Kumar. Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org . Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *