PDF de programación - programacion SHELL (bash)

Imágen de pdf programacion SHELL (bash)

programacion SHELL (bash)gráfica de visualizaciones

Publicado el 27 de Marzo del 2018
1.265 visualizaciones desde el 27 de Marzo del 2018
356,7 KB
64 paginas
Creado hace 12a (30/08/2011)
SHELL
Programación en



( Bash

)

¿ Que es una shell ?

El shell de Unix o también shell, es el termino usado en informática para referirse a un interprete de
comandos. Los comandos que aportan los intérpretes, pueden usarse a modo de guión si se escriben
en ficheros ejecutables denominados shell-scripts, de este modo, cuando el usuario necesita hacer
uso de varios comandos o combinados de comandos con herramientas, escribe en un fichero de
texto marcado como ejecutable, las operaciones que posteriormente, línea por línea, el intérprete
traducirá al núcleo para que las realice.
Sin ser un shell estrictamente un lenguaje de programación, al proceso de crear scripts de shell se
le denomina programación shell o en inglés, shell programming o shell scripting.
Los usuarios de Unix y similares, pueden elegir entre distintos shells (programa que se debería
ejecutar cuando inician la sesión, bash, ash, csh, zsh, ksh, tcsh).

El término shell también hace referencia a un programa particular, tal como el Bourne shell, sh. El
Bourne shell fue el shell usado en las primeras versiones de Unix y se convirtió en un estándar;
todos los sistemas similares a Unix tienen al menos un shell compatible con el Bourne shell. El
programa Bourne shell se encuentra dentro de la jerarquía de archivos de Unix en /bin/sh. En
algunos sistemas, tal como BSD, /bin/sh es un Bourne shell o un equivalente, pero en otros
sistemas como muchas distribuciones de Linux, /bin/sh es un enlace simbólico a un shell
compatible con más características (como Bash). POSIX especifica su shell estándar como un
subconjunto estricto del Korn shell.

Primeros pasos

Uno de los primeros pasos es saber que shell (interprete de comando estamos usando).

$ echo $SHELL
/bin/bash

Las variables por convención se utiliza en mayúsculas y las forma de obtener el contenido de la
variable o mejor dicho su valor es poniendo el símbolo $.

Si queremos saber la versión de nuestro interprete de comandos en este caso bash ejecutamos el
siguiente comando :

$ echo $BASH_VERSION
4.1.5(1)-release

Para conocer todos los interpretes de comandos que tenemos veremos que se guardan dentro de un
archivo llamado shells.

$ cat /etc/shells
/bin/csh
/bin/sh
/bin/ksh
/bin/tcsh
/bin/dash
/bin/bash

Si queremos cambiar nuestro shell por defecto a bash ejecutamos el siguiente comando y luego
volvemos a loguearno para que tome la nueva configuración.

$ chsh -s /bin/bash

Manejo de comodines

Los comodines de búsqueda son signos o símbolos que nos ayudarán a la hora de encontrar algún
archivo en nuestro ordenador. Donde mas lo podemos llegar a utilizar es con el comando ls.

$ ls /bin/bash

Acá tenemos una tabla con los distintos comodines y su explicación.

Comodín
?
*
[conjunto]
[!conjunto] Un carácter que no este en conjunto.

Descripción
Uno o sólo un carácter.
Cero o más caracteres.
Uno los caracteres de conjunto.

Ejemplo de usos :

$ ls *.txt

En el ejemplo anterior me trae cualquier archivo que tenga como extensión txt.

$ ls /bin/l?
/bin/ln /bin/ls

El tercer comodín permite indicar un conjunto de caracteres que son válidos. Por ejemplo l[eno]*
encontrara el fichero less lesssecho lessfile lesskey lesspipe ln loadkeys login no traira liss. Es
decir como primer letra si o si l a continuación puede ser e, n o o y luego como bien dijimos el
comodín (*) representa cero o más caracteres realiza una distributiva.

$ ls /bin/l[eno]*
/bin/less /bin/lessecho /bin/lessfile /bin/lesskey /bin/lesspipe /bin/ln /bin/loadkeys /bin/login

ín tilde
El comod



Este comodín es ~ que se utiliza para referirse al home de los usuarios, por ejemplo ~pablo se
refiere a /home/pablo.

$ ls -a ~pablo
./ ../ .bash_logout .bash_profile .bashrc

El comod
ín


llaves



Este comodín a comparación de los otros, no estudia el nombre de los ficheros existentes en disco
para nada, simplemente expande una palabra por cada una de las cadenas de caracteres que
contiene, por ejemplo :

$ echo c{ami,ontamina,}on
camion cantaminaon con

Lo que realiza es una distribución c->ami->on, c->ontaminaon y c->con, al poner ,} lo que hace es
poder formar la palabra con es decir como luego de la , no hay nada puede formar otra palabra con
on.

Veamos un ejemplo mas complejo que añade mas llaves :

$ echo c{a{mi,nt}a,ose}r
caminar cantar coser

Siempre combina c->a y luego con {mi,nt} luego con a y la r y por ultimo combina c->ose->r

Se puede usar dos puntos (..) para hacer algo similar a lo que hacen los corchetes es decir indicar un rango.
Por ejemplo :

$ echo l{a..j}
la lb lc ld le lf lg lh li lj

Las llaves deben tener al menos dos cadenas, el siguiente ejemplo vemos que esto no sucede.

$ echo ca{a}sa
ca{a}sa

Comodines extendidos

Bash permite usar un conjunto de comodines extendidos, pero para poder usarlos debemos de
activar la opción ext_glob de Bash.

Para fijar estos valores usamos el comando shopt (shell option), si ejecutamos el comando shopt
veremos la lista de variables que podemos modificar.

$ shopt
autocd off
cdable_vars off
cdspell off
checkhash off
checkjobs off
checkwinsize on
cmdhist on
compat31 off
compat32 off
compat40 off
dirspell off
dotglob off
execfail off
expand_aliases on
extdebug off
extglob on
extquote on
failglob off
force_fignore on
globstar off
gnu_errfmt off

histappend on
histreedit off
histverify off
hostcomplete off
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off

Todas estas variables son booleanas que contienen el valor on/off, para activarlo usamos el
comando shopt -s opcion y para desactivarlo shopt -u opcion.

Vemos en la tabla algunas de esa opciones con mayor detalle de lo que hace :

Opción

cdable_vars
cdspell

cmdhist

dotglob
expand_aliases
extglob
failglob

force_fignore

hostcomplete

Descripción

Permite que cd use los valores de las variables como nombres de directorios.
Ignora pequeños errores en los cambios de directorio con cd. Sólo en la ejecución
interactiva.
Guarda los comandos que hemos escrito en varias líneas en una sola línea del
historial.
Incluye en la expansión de comodines los ficheros que empiezan por (.).
Expande un alias cuando lo ejecuta.
Utiliza extensiones de los comodines.
Si falla la expansión de un comodín porque no encuentra nada falla el comando
(como hace el C shell).
Los sufijos especificados en la variable de entorno FIGNORE no se usan para
completar palabras con tabulador.
Se intenta completar nombres de host al pulsar tabulador cuando la palabra
contiene una @.

interactive_comments Permite que dentro de un comando de sesión interactiva haya comentarios

login_shell
nocaseglob

nullglob

sourcepath

(precedidos por #).
Variable de sólo lectura que indica si Bash ha sido lanzado como un shell de login.
Indica si los comodines expanden sin sensibilidad a mayúsculas/minúsculas. No
confundir con la variable completion-ignore-case de inputrc que lo que hacía era
expandir con tabuladores.
Hace que cuando un patrón no encuentra ficheros, se expandan por la cadena vacía
en vez de por el patrón sin expandir.
Hace que el comando interno source busque el argumento en los directorios que
indique PATH.

Ejemplo :

$ export DOC=/usr/share/doc
$ shopt -s cdable_vars
$ cd DOC

La opción cdable_vars permite que el comando cd pueda utilizar variables como nombres de
directorios. Observamos que DOC al utilizarlo con el comando cd no va precedido por $.

$ shopt -s extglob

Con esta opción podemos utilizar uno de estos cinco nuevos tipos de patrones:

Cero o una ocurrencia de pattern-list.
?(pattern-list)
*(pattern-list) Cero o más ocurrencias de pattern-list.
+(pattern-list) Una o más ocurrencias de pattern-list.
@(pattern-list) Exactamente uno de los patrones de la lista.
!(pattern-list)

Cualquier cosa excepto uno de los patrones de la lista.

$ ls -l /bin/l?
-rwxr-xr-x 1 root root 48920 abr 28 2010 /bin/ln
-rwxr-xr-x 1 root root 108008 abr 28 2010 /bin/ls

Ejemplo donde solo listo que coincida con 0 o 9.

$ touch carta{0..9}.txt
$ ls carta+([0..9]).txt
carta0.txt carta9.txt

Ejemplo donde listo el rango de 0 a 9.

$ touch carta{0..9}.txt
$ ls carta+([0-9]).txt
carta0.txt carta1.txt carta2.txt carta3.txt carta4.txt carta5.txt carta6.txt carta7.txt carta8.txt
carta9.txt

Si queremos buscar los archivos que solo tengan extensión .c, .h y .o realizamos lo siguiente :

$ touch ejemplo{c,h,o,cpp}.txt
$ ls *.[cho]
ejemplo.c ejemplo.h ejemplo.o

Vemos que en el ejemplo anterior solamente me trae las extensiones que contengan solo un carácter
(*.c, *.h y *.o), el corchetes [] sólo permite acepta un carácter. Si quiero traer los que tengan
extensión .cpp no se podrá. En cambio con el siguiente ejemplo si podemos :

$ touch ejemplo{c,h,o,cpp}.txt
$ ls *.@(c|o|h|cpp)
ejemplo.c ejemplo.cpp ejemplo.h ejemplo.o

Con el pipe (|) realiza un or (o) que coincida con algunos de los patrones correspondientes lo que
me permite añadir patrones.

El ejemplo anterior es equivalente a :

$ ls @(*.c|*.o|*.h|*.cpp)
ejemplo.c ejemplo.cpp ejemplo.h ejemplo.o

Si quiero listar lo que no sea con extensión *.c, *.o, *.h y *.cpp realizo la muestra con el patrón !

$ ls !(*.c|*.o|*.h|*.cpp)
carta0.txt carta1.txt carta2.txt carta3.txt carta4.txt carta5.txt carta6.txt carta7.txt carta8.txt
carta9.txt

Si quiero borrar todos los archivos excepto los que empiezan con papel[0-9].txt realizo lo
siguiente :

$ touch carta{0..9}.txt
$ touch papel{0..9}.txt
$ rm -v !(papel+([0-9])).txt
«carta0.txt» borrado
«carta1.txt» borrado
«carta2.txt» b
  • Links de descarga
http://lwp-l.com/pdf9935

Comentarios de: programacion SHELL (bash) (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