PDF de programación - Programación Shell en Linux

Imágen de pdf Programación Shell en Linux

Programación Shell en Linuxgráfica de visualizaciones

Publicado el 6 de Agosto del 2017
716 visualizaciones desde el 6 de Agosto del 2017
299,7 KB
14 paginas
Creado hace 17a (11/02/2007)
casidiablo.blogspot.com

Programación Shell en Linux

El turno ahora es para los intérpretes de comandos de Linux y su programación, conocida
como programación shell. Aunque el intérprete de comandos es independiente del
lenguaje de programación utilizado, Linux permite crear programas utilizando
características propias de cada un de los shell existentes.

¿como, no hay solo un intérprete? Umm, nop; hay bastantes shells para Linux(o
intérpretes de comandos o consolas o como lo llames [de ahora en adelante shell]). No
como en windows que tan solo tiene el interprete de DOS (o cmd o command).

Como habrás podido deducir la programación en shell es “interpretada”, no compilada,
lo que reduce el desempeño del sistema; pero la ventaja es la facilidad de creación y
mantención.

Los temas a ver serán los siguientes:

● Qué es un shell y Qué shells están disponibles
● Principios de los shells (redirección)
● Variables de entorno
● Procesamiento en segundo plano
● Completación y sustitución de comandos (sustitución y creación del alias)
● Secuencias de comandos de los shell

Qué es shell

Unos dicen que es el sistema operativo, otros dicen que es una pantalla negra sin sentido
y anticuada, otros dicen que es la causa de que Linux no sea famosa entre gente
inexperta. ¿quien tiene la razón? Hagan sus apuestas!!! No, ahora en serio.

NO es el sistema operativo (el sistema operativo es el software que dirige la
computadora, habla con el hardware, carga y ejecuta programas, etc.); cuando se ve el
indicador de la computadora y se escriben comandos para ejecutar, con lo que estamos
tratando es con el shell.

Una característica interesante de Linux, es que los shells son completamente
independientes. Como usuario tenemos la libertad de elegir entre uno u otro shell.
También es posible interactuar con un shell, y escribir comandos para otro.

Shells disponibles en Linux

Piensa que el shell es un programa que está entre el usuario y el sistema operativo. Este
programa interpreta lo que el usuario le indica (en su lenguaje) para manipular el
sistema operativo.

por Cristian Castiblanco

casidiablo.blogspot.com

El shell original disponible en los sistemas UNIX era el shell Bourne (“sh”). Después dos
shells que se volvieron populares fueron shell Korn (“ksh”) y el el shell C (“csh”), cada
uno con sus características propias, ventajas y desventajas.

Los shells Bourne y el C fueron reescritos, como resultado ahora tenemos el “Bourne
again shell (Shell Bourne nuevamente)” o “bash”, y el shell T (“tcsh”). Los tres shells
están disponibles en casi todas las distros de Linux. Bash es probablemente el shell más
utilizado actualmente, y es el que viene por defecto en la mayoría de las distros.

Principios de los shell

Operación de los shell y conceptos básicos de sintaxis

El shell es un programa que nos permite interactuar con el sistema operativo. La “línea
de comandos” es la entrada del usuario para el shell. El shell examina la línea de
comandos, verifica que lo que se ha escrito es correcto, determina si se ha digitado el
nombre de un programa (un programa binario o compilado), y de ser así envia dicho
programa al núcleo (kernel) para su ejecución.

Todos los comandos shell utilizan el siguiente formato:

comando opcion1 opcion2 opcion3 ... opcionN argumento1 argumento2 ... argumentoN

Esta línea se conoce como línea de comandos; que consiste en un comando y una o más
opciones (y/o argumentos). Por lo general el espacio en blanco se ignora. En Linux los
comandos son sensibles al uso de mayúsculas y minúsculas, cosa que no pasa en
Windows. El comando se termina pulsando la tecla Enter; aunque se puede continuar el
comando en una nueva línea usando backslash (\).

comando­largisisisisisisisimo opcion1 opcion2 opcion3 ... opcionN \
argumento1 argumento2 ... argumentoN

Además es posible concatenar varios comandos, separándolos con punto y coma (;), por
ejemplo:

clear; pwd; ls

Redirección de E/S

Cuando se ejecuta un programa en Linux se abre automáticamente tres archivos (flujos)
de E/S para ellos. Estos son: la entrada estándar, la salida estándar y el error estándar.
Aunque parezca confuso todos los sistemas UNIX utilizan este sistema, basado en el
manejo de archivos. Por ejemplo, si deseas enviar datos a tu disco extraible debes
enviar los datos al archivo asociado con dicho pendrive, por lo general /dev/sda1.

por Cristian Castiblanco

casidiablo.blogspot.com

Por defecto la salida estándar está conectada a la pantalla, la entrada de estándar al
teclado, y el error estándar a la pantalla. Es posible reasignar estos destinos antes de
ejecutar el programa, en lo que se conoce como redirección de E/S.

Supongamos que queremos crear una lista de archivos del directorio /usr/include, pero
que dichos archivos contengan la palabra “#include”. Una forma sencilla de hacer esto
sería:

grep ­l “#include” /usr/include/*.h > ListaArchivos

grep comprobará los archivos de la carpeta /usr/lib cuya extensión sea *.h y
determinará cuales de ellos contienen la palabra “#include”. El carácter > es el que
indica la redirección de salida; esto ocasiona que el shell redireccione la salida estándar
a el archivo ListaArchivos. Los nombres que están en el archivo se verán así:

/usr/include/GUI.h
/usr/include/Float.h
/usr/include/Redirect.h
/usr/include/nvu.h
/usr/include/bluefish.h

Para reemplazar, por ejemplo, la cadena /usr/include al principio de cada archivo
puedes utilizar el comando sed:

sed 's#^/usr/include/##' < ListaArchivos > ListaArchivoss

El comando sed opera sobre los datos de entrada estándar, así que en este caso
utilizamos el carácter < para redireccionar la entrada. En lugar de leer del teclado, esta
vez leerá de un archivo. Después, la salida del comando sed se redirige hacia el archivo
ListaArchivoss.

Pero, ¿cómo se redirige el error estándar? Para redirigir el error estándar se utiliza >&,
por ejemplo:

sed 's#^/usr/include/##' < ListaArchivos >& ErrorSed > SalidaSed

O se puede redirigir tanto el error estándar, como la salida estándar así:

sed 's#^/usr/include/##' < ListaArchivos >& Salida

Tuberías

Una forma relacionada con la redirección se conoce como tubería. Partamos del ejemplo
anterior; ya no solo quiero los archivos sino además los quiero ordenados
alfabéticamente. Podriamos utilizar la redirección así:

por Cristian Castiblanco

casidiablo.blogspot.com

grep ­l “#include” /usr/include/*.h > ListaArchivos
sort ListaArchivos > ListaOrdenada

Importante!!!
El comando sort   ListaArchivos  >  ListaOrdenada en ningún momento utiliza
redirección de entrada. Algunos comandos como sort reciben directamente el nombre de
un archivo como argumento, que es distinto a redireccionar la entrada; esto se conoce
como filtro.

Obviamente debe haber una manera más eficiente de hacer ésta operación, es decir, sin
usar dos comandos ni un archivo temporal. Por ejemplo:

grep ­l “#include” /usr/include/*.h | sort > ListaOrdenada

El carácter de tubería (|) encadena dos comandos y conecta (redirecciona) la salida
estándar del primero, a la entrada del segundo. Una sola línea de comandos puede tener
cualquier número de tuberías:

grep   ­l   “#include”   /usr/include/*.h   |   sort   |   sed   's#^/usr/include/##'   > 
ListaModificadaOrdenada

Variables de entorno

Normalmente los programas utilizan variables para poder llevar a cabo determinadas
acciones. Por ejemplo los editores como vi o emacs necesitan saber en que tipo de shell
se etán ejecutando. Está información podría ser cargada mediante el uso de argumentos
al momento de ejecutar un comando, pero dicha tarea sería más que tediosa para el
usuario, ya que se tendría que hacer cada vez que se ejecute el comando.

Los shell solucionan estos problemas con las variables de entorno. Una variable de
entorno es simplemente un par nombre/valor. El shell hace una lista de variables y las
mantiene disponibles para cualquier programa que se ejecute sobre él. Existen dos tipos
de variables: las variables normales de shell (variables locales), y las variables de
entorno (variables globales).

Para establecer una variable de entorno se utiliza el comando:

export NOMBRE=valor

Si el valor de la variable incluye espacios en blanco es posible encerrar dicho valor entre
comillas dobles o sencillas, para evitar conflictos. Por ejemplo:

export JAVAPATH="/usr/lib/programas instalados/maquina virtual"

También es posible agregar nuevos valores a una variable ya existente, para ello
podemos utilizar la siguiente sintaxis:

export JAVAPATH="$JAVAPATH otro_valor"

por Cristian Castiblanco

casidiablo.blogspot.com

Esto agrega la cadena "otro_valor" a la variable JAVAPATH. Puedes ver el valor de una
variable con el comando echo, así:

echo $PATH

También es posible ver las variables disponibles de una manera sencilla. Digitamos el
comando "echo $" y después pulsamos dos veces la tacla TAB. Verás algo como esto:

ubuntu@ubuntu:~$ echo $
$_                         $GDM_XSERVER_LOCATION      $OSTYPE
$BASH                      $GNOME_DESKTOP_SESSION_ID  $PATH
$bash205                   $GNOME_KEYRING_SOCKET      $PIPESTATUS
$bash205b                  $GROUPS                    $PPID
$bash3                     $GTK_RC_FILES              $PROMPT_COMMAND
$BASH_ARGC                 $HISTCMD                   $PS1
$BASH_ARGV                 $HISTCONTROL               $PS2
$BASH_COMMAND              $HISTFILE                  $PS4
$BASH_COMPLETION           $HISTFILESIZE              $PWD
$BASH_COMPLETION_DIR       $HISTSIZE                  $RANDOM
$BASH_LINENO
  • Links de descarga
http://lwp-l.com/pdf6109

Comentarios de: Programación Shell en Linux (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad