Que es un "Shell Script" en Linux?

bannerg4

Computer Code HTML

Hoy introduciré el uso de los llamados scripts del shell en la distribución Ubuntu de Linux, es un paso más hacia mi meta de mostrar la potencialidad del Linux como Sistema Operativo y plataforma ideal para implementar soluciones bioinformáticas. Para mis lectores que en algún momento pretérito usaron el DOS,  les informo que estos scripts son equivalentes a los archivos batch, la única diferencia es que los scripts del shell son mucho más poderosos y versátiles. En los postings anteriores introduje algunas nociones elementales de comandos de Linux y como ponerlos a trabajar juntos para implementar tareas o simples algoritmos. Muchos comandos de Linux pueden ser usados en conjunto en una sola línea, estos comandos en la línea estan conectados moviendo información, este tipo de construcción es llamado pipe. Mi último posting fué en torno a estas estructuras llamadas pipes , secuencias de comandos del Shell de linux en una simple linea donde el output de un comando es usado como input de otro comando.

Inclusive presenté un ejemplo simple y trivial del uso de pipes en Linux:

cat * | grep “Linux” | grep -v “UNIX” | wc -l

En esta secuencia de comandos del shell o pipe, en el primero de los 4 cuatros segmentos o secciones separadas por barras verticales, el comando cat lee y pone junto el contenido de todos los archivos en el directorio de trabajo. El * o  asterisco es un wildcard que representa todos los elementos en el directorio, recuerdan los wildcards del DOS?. El primer pipe manda el output del comando cat como input hacia el comando grep , que retorna solo las lineas que contienen la expresión Linux . Este segundo pipe manda estas lineas como input a otro comando grep con la opción -v , este grep elimina las lineas que contienen la expresión UNIX. Finalmente, el tercer pipe manda este output a wc -1, el cual cuenta el número de lineas y escribe el resultado a la pantalla.

No fue mi intención en el  posting anterior crear un tutorial de como implementar pipes en el Shell de Linux. Tampoco pretendo crear un tutorial en torno a como crear scripts en el  Shell del Linux, es un tema amplio y profundo  que como mínimo requiere la lectura de algunos libros y largas horas trabajando en la consola de Linux. Mi única intención es introducir estos conceptos de una manera simple y elemental a científicos y otra clase de profesionales que de algún modo requieren de un entendimiento básico de estos términos. Entiendo que para algunos de mis lectores, programadores o especialistas en tecnología de la información, estos postings puedan parecer un ejercicio de lo trivial. Estos artículos solo tiene como objetivo introducir y exponer nociones básicas de Linux, mostrar que Linux es un Sistema Operativo, que puede ser aprendido con un mínimo de esfuerzo por biologos. Es un hecho , Linux ya es el Sistema Operativo para actividad de investigaciones biológicas, es imperativo , al menos entender conceptos básicos. Quién sabe , si algunos de mis lectores, se motiva y compra un libro para aprender Linux. De ser así, estos postings habrian cumplido su cometido. Motivar y de algún modo repetir que Linux llegó a nuestro ámbito científico para quedarse para siempre.

En pocas palabras, un script del Shell es un archivo de texto que contiene una secuencia de comandos para el Sistema Operativo Linux, en este caso la distribución Ubuntu.  Es llamado Shell Script porque combina en un solo archivo una secuencia de comandos y otros operadores que de otro modo serian introducidos al sistema desde el teclado comando a comando. El Shell ya sabemos que es el interprete de comando y los comandos que usamos para comunicarnos con el sistema. Un script del Shell es usualmente creado para secuencias de comandos que el usuario necesita usarlas frequentemente. La sequencia de comandos es iniciada cuando invocamos el nombre del archivo en la línea de comando. Es importante entender que un script no es compilado sino interpretado, en otras palabras el shell lee cada línea del archivo y la ejecuta inmediatamente. Por supuesto que un script ejecuta mucho más lento que un programa compilado en un lenguaje de programación como C, pero un script es más pequeño, no requiere librerias adicionales y el tiempo de desarrollo es mucho mas pequeño que el de un programa compilado. Es muy importante entender que para escribir scripts para el shell de linux, necesitamos un verdadero editor de texto y uno que no wrap o reordene las lineas de texto. Este reordenamiento de las lineas del script puede romper la sintaxis del script y crear graves problemas a la hora de ejecución. Es una buena idea usar el editor de texto vim que no reordena automáticamente las lineas.

A continuación les presento un script del shell de Linux, es un script para realizar funciones de backup, por supuesto como todo script  consiste en un grupo de comandos organizado en un solo archivo. No es mi intención explicarlo, presentaré en mis próximos posting algunos scripts y sus detalladas explicaciones. Los scripts que presentaré implementan y resuelven complejas tareas bioinformáticas en un modo simple, elegante y eficiente. Solo muestro este script para que noten el reducido número de lineas y lo simple de la sintaxis para cumplir la misión de realizar un backup.

#!/bin/sh
####################################
#
# Backup to NFS mount script.
#
####################################

# What to backup.
backup_files=”/home /var/spool/mail /etc /root /boot /opt”

# Where to backup to.
dest=”/mnt/backup”

# Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file=”$hostname-$day.tgz”

# Print start status message.
echo “Backing up $backup_files to $dest/$archive_file”
date
echo

# Backup the files using tar.
tar czf $dest/$archive_file $backup_files

# Print end status message.
echo
echo “Backup finished”
date

# Long listing of files in $dest to check file sizes.
ls -lh $dest

7 Responses to Que es un "Shell Script" en Linux?

  1. Dr. Ernesto Garcia says:

    Excelente estos postings, necesito entender cosas elementales de Linux, hasta ahorita no entendia plenamente la diferencia entre un script del shell y un pipe, continua con tu trabajo, sera apreciado siempre, espero tus pipes de bioinformaticas, pero continua introduciendo conceptos basicos

    Dr. Ernesto Garcia

    • Ruben Fernandez says:

      Asi es , hay un grupo que entendemos que el linux aqui esta y es necesario aprenderlo , y es lo mejor para el area de la bioinformatica

  2. Ximo says:

    Muy bueno el pots a mi amigo Sirius le encantara.
    Saludos Ximo.

    • Ruben Fernández says:

      Muchas gracias por gustarle el posting, pero esta clase de posting es dedicado a personas que comienzan con el linux, fundamentalmente en el area de la bioinformatica y no entienden conceptos basicos como pipe y scripts del shell, creo que Sirius sabe muy bien esto, y muchisimo mas de linux que yo. Personalmente creo que Linux ya es el OS para actividades cientificas.Estos postings es solo parte de mi esfuerzo para promocionar linux como sistema operativo para aplicaciones bioinformaticas. Por cierto, ya vio su smiley face? , el mio, a mi me trae loco, creo que muevo my blog para Typepad.

      • Ximo says:

        Bueno si lo vi pero ni caso,creo que no hay motivo para eso .Respecto a linux bueno yo uso ubuntu que me es mas facil y poco a poco progresando con el,creo que no volvere a windows.Bueno Sirius esta a fondo con esto de linux,con libros y cursos que hace.
        saludos. Ximo.

  3. Ruben Fernandez says:

    ubuntu es la distribucion que tengo instalado en mi maquina, es una maravilla, facil de instalar, soporte para todo hardware, drivers producidos por companias, la consola y los comandos es lo mismo para todos los distros de linux, en fin es lo mejor que he visto como sistema operativo

  4. guille says:

    Muy buenos los ejemplos de scripts me sirvieron muchisimo para clases. Gracias! buen blog!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: