Mapa del sitio | Contacto | Ayuda
También estamos en: facebook    twitter
 
 
Usted está en: Inicio » Guías » Programación con bash: comandos

Guías

Programación con bash: comandos

Comando exec

Equivalente a las llamadas a sistema execlp. Superpone el código del comando especificado sobre el proceso que está ejecutando el shell-script.
Una vez completado el comando especificado en la orden exec, no es posible volver al proceso que hizo la llamada y por lo tanto el resto del código del script no se ejecuta.

Ejemplo

#!/bin/bash
echo "Inicio $0"                     "Inicio fecha"                                    
exec date                                mié feb 13 19:14:21 CET 2008
echo "Final $0"

Comando let

Permite evaluar expresiones aritméticas, devolviendo un 1 si el resultado de la expresión es nulo y un cero en caso contrario.Sintaxi: let "lista-expresiones"

Ejemplo

 > let 'a = 8' 'b = 13'
 > let c=a+b
 > echo $c
	21

Comando expr

El comando expr evalua una expresión, su sintaxi es: Expr [substr | index | length] args

Ejemplos

> var1=10 
> var1=`expr $var1 + 1`
> echo $var1
	11                       
> expr index "Hola, mundo" xim
	7              1        7        11
> expr length "Hola, mundo"
	11             1                   11
> expr substr "Hola, mundo" 7 5
	mundo               7<-->7+5

Comando set

Asigna a los valores de los argumentos de comando de línea($1-$9) a los argumentos con que fue llamado set.
Sintaxi: set [-- aefhkntuvx] lista-argumentos

Ejemplos

PrSet
#!/bin/bash
set do re mi
echo $3 $2 $1
set $(date)?
echo $@
echo "$3-$2-$6"
Ejecución
< PrSet
mi re do
Wed Feb 11 13:24:52 MET 2008
11-Feb-2008

Comandos head/tail

El comando head se utiliza para mostrar las primeras n líneas de un archivo.
El comando tail permite mostrar las últimas n líneas de un archivo.
Sintaxi:
head [-cn]... [fichero]…
tail [-cn]... [fichero]...

Ejemplo

# Visualizar las primeras 10 líneas del fichero /etc/passwd:
> head /etc/passwd 
# Visualizar los primeros 20 caracteres:
> head -c20 /etc/passwd
# Mostrar 5 últimas líneas fichero /etc/passwd:
> tail –5 /etc/passwd
# Mostrar las líneas del 7 al 9 de los ficheros de un directorio:
> ls –l dir  | head –9 | tail –3

Comando cat

El comando cat permite concatenar diversos archivos, enviando el resultado a la salida estándar.
Cuando solo se especifica un único archivo, el comando permite mostrarlo por pantalla

Ejemplo

# Concatenar ficheros f1, f2, f3 y el resultado se almacena # en el fichero f4
> cat f1 f2 f3 > f4 
# Visualizamos las últimas 15 líneas de un fichero
> cat fich | tail –15

Comando paste

El comando paste permite unir archivos horizontalmente (imprime las líneas de cada uno de los ficheros implicados, separadas por tabuladores y terminadas por un salto de línea).
Sintaxi:
paste   [-s] [-d   delim-list] [file...]

Ejemplo I

 >cat f1.txt
	11 22 33
	11 22 33
>cat f2.txt 
	aa bb cc
	AA BB CC
>paste f1.txt f2.txt 
	11 22 33        aa bb cc
	11 22 33        AA BB CC

Ejemplo II

>paste -s f1.txt f2.txt 
	11 22 33        11 22 33
	aa bb cc         AA BB cc
>cat f1.txt f2.txt
	11 22 33
	11 22 33
	aa bb cc
	AA BB cc

Comando sort

El comando sort permite ordenar las líneas de un archivo.
Sintaxi:
sort [-nrtk]... [fichero]...
A la hora de realizar la ordenación se pueden escoger diversas opciones:
  • Alfabética (por defecto) o numérica (-n)?
  • Orden ascendente (por defecto) o descendente (-r).
  • Seleccionar separador de campos (-t).
  • Seleccionar los campos utilizados para realizar la ordenación (-k c_inicio, c_final).

Ejemplo

sort arch1 > arch2		# Ord. alfabética-ascendente 
	sort -n arch1 >arch2 	# Ord. numérica-ascendente 
	sort -nr arch1 >arch2   	# Ord. Numérica-descendente.
	sort -t: -k 2,3 arch1 >arch2 	# Ord. campos  2 a 3, separador de campos “:” 

Comando cut

El comando cut se utiliza para separar de cada línea de un archivo uno ó más campos (columnas), ó partes del archivo.
Los campos se delimitan, por defecto, por un tabulador, pero se permite especificar el separador de campos.
Sintaxi
cut [-fcd]... [fichero]...

Ejemplo

cut -f2 fic1	      # Se muestra el segundo campo
cut -c1-6 fic1     # Muestra las primeras 6 columnas (cars)?
# Mostar la versión del SO y el kernel
uname -a | cut -d" " -f1,3,11,12   # -d" " significa separador  de campos es ""

Comando find

Permite localizar archivos dentro del árbol de directorios de Linux que cumplan ciertas características.
Sintaxi:
find [camino...] [expresión]

Ejemplos

# Buscar en el directorio actual todos los archivos o directorios de nombre perdido.
> find . -name perdido
# Busca, a partir del directorio /usr/people, todos los archivos que terminen en f
> find /usr/people -name '*.f' -print

Comando Grep

El comando grep permite buscar patrones dentro de ficheros e imprimir todas las líneas que contengan dicho patrón.
Sintaxi: grep [ -bchilnsvw ] expresión-regular [fichero... ] ó grep [ -bchilnsvw ] -e lista_patrones [ -f fic_patrones] ... [fichero... ]
Principales opciones:
  • -c: Solo imprimir el número de líneas que contienen el patrón
  • -i: No distinguir entre mayúsculas y minúsculas
  • -n: Anteponer a cada línea coincidente su número de línea dentro del fichero.
  • -v: Imprimir las líneas que no contengan el patrón
  • -f fichero: Fichero de patrones.

Ejemplo

# Buscamos la entrada correspondiente al usuario root en el fichero de contraseñas.
> grep root /etc/passwd
root:x:0:1:Super-User:/:/sbin/sh
# Imprimir todas los procesos que contienen fernando
> ps -ef | grep fernando                                                                                                              
fernando 11206 11097  0 13:28:00 pts/2    0:00 bash
fernando 11097 10928  0 13:15:04 pts/2    0:00 bash
fernando 10928 10924  0 12:46:09 pts/2    0:00 -sh
fernando 10627   148  0 11:29:38 ?        0:03 imapd
> ps -ef | grep -c fernando
4
>  ps -ef | grep -n fernando
48:fernando 11097 10928  0 13:15:04 pts/2    0:00 bash
50:fernando 10928 10924  0 12:46:09 pts/2    0:00 -sh
53:fernando 11248 11097  0 13:34:29 pts/2    0:00 bash
72:fernando 10627   148  0 11:29:38 	?       0:03 imapd

Expresiones regulares

Los dos siguientes comandos se basan en la utilización de expresiones regulares, admiten los siguientes caracteres especiales:
  • ^: Concordar con el inicio de línea
  • $: Concordar con el final de línea
  • .: Representa un único carácter
  • (car)*: Concuerda con un número arbitrario de los caracteres (car)?
  • (car)?: Concuerda con 0 ó una instancia de (car)?
  • [...]: Concuerda con alguno de los caracteres dentro de los corchetes. Soporta rangos de caracteres.
  • [^...]: Concuerda con alguno de los caracteres no incluido dentro de los corchetes.
  • <: Concordancia al inicio de una palabra
  • >: Concordancia al final de una palabra
  • (carácter)\{m,n\} : Concuerda con m a n repeticiones del carácter.
  • (carácter)\{m,\} : Concuerda con m ó más repeticiones del carácter.
  • (carácter) \{1,n\}: Concuerda con n ó menos repeticiones del carácter.
  • (carácter) \{,n\}: Concuerda con n repeticiones del carácter.
  • () : Operador de grupo.

Ejemplo

# Obtener el número de líneas de un fichero sin contar las líneas en blanco.
> grep –nv ‘^$’ fic
# Listar solo los directorios. 
> ls -l | grep ‘^d’ 
# Buscar todos los ficheros con extensión diferente de txt
> ls -l | grep '[^.txt]$‘
# Obtener las líneas que al menos tienen 9 letras minúsculas consecutivas. 
> grep ‘[a-z]{9}’ fic

Otros comandos

  • wc: Imprime el número de carácteres, líneas de un fichero.
  • basename: Obtiene el nombre del comando de un camino.
  • dirname: Obtiene la ruta del camino un comando.
  • nohup: Ejecución ininterrumpida de un comando.
  • trap: Ejecuta una función/comando cuando se recibe una señal.

Ejemplo

> wc -l /ect/password	# Resultado:  59 /etc/passwd
> basename /bin/ls 		# Resultado: ls
> dirname /bin/ls 		# Resultado: /bin
> nohup ls &		# Coloca la salida en nohup.out
# Deshabilitar el control-C (señal 2)?
> trap 'echo "Control?C deshabilitado."' 2

Comando awk

Es un lenguaje de búsqueda y procesamiento de patrones.
  • Buscar líneas en ficheros que contienen ciertos patrones.
  • Cuando en una línea se encuentra un patrón, awk realiza las acciones especificadas para dicho patrón sobre dicha línea.
  • Se procesan todas las líneas de entrada de esta forma hasta que se llega al final del fichero.
Ejecución programas awk:
Si el programa es corto, es más fácil incluir el programa en el mismo comando que ejecuta awk, de la siguiente forma: awk ’program’ input–file1 input–file2 ...
Cuando el programa es largo, se puede poner en un fichero y ejecutarlo con un comando de la siguiente forma:awk –f program–file input–file1 input–file2 ...
La Sintaxi del 'programa':
BEGIN  { acción } 
patrón { acción }
..................................
patrón { acción }
END  { acción }

Ejemplo

# Programa awk que imprime los nombre de los directorios y el tamaño # de los ficheros pertenecientes al usuario root.
ls –la ¦ awk 'BEGIN { print "Inicio procesamiento "}
	/^d/ { print "Directorio ”$9 }
	~/^d/ &&  $3 == "root" {print "fichero root: "$9 }
	END { print "Inicio procesamiento"}'

Entradas de programa awk

Cada línea de entrada se divide en un campos separados por espacios. Cada campo se denomina como $1, $2, etc. $0 indica la línea entera.
Se permite la modificación del contenido de cualquiera de los campos.
Se pueden referir a los campos con expresiones numéricas como $i ó $(n+1). Si la expresión resultante no es un entera, se truncará la parte decimal.

Ejemplo

# Renombrar los ficheros que cumplen un determinado patrón.
ls -1 patrón | awk '{print "mv "$1" "$1".nuevo"}' | bash

Variables predefinidas

  • FS: Separador de los campos de entrada. Se puede especificar con la opción -Fc en la línea de comandos
  • RS: Separador de registro de entrada (normalmente salto línea).
  • OFS: Separador del campo de salida.
  • ORS: Separador de registro de salida.
  • NF: Número de campos en el registro actual
  • NR: Número de registros (líneas) procesados hasta el momento.
  • RSTART: Posición de la cadena en la que se verifica el patrón utilizado, comenzando desde 1.
  • RLENGTH: Longitud de la cadena en la que se verifica el patrón utilizado.

Variables de usuario

awk permite el uso de variables numéricas y cadenas, definidas por el usuario. No es necesario declararlas y se suelen inicializar dentrode la cláusila BEGIN.

Ejemplo

# El siguiente programa muestra la forma en que puede 
# calcularse el tamaño medio y tamaño total de los ficheros de 
# un usuario. 
#!/bin/bash
ls -l | awk 'BEGIN { print "comenzamos ..."; total=0 }
	{ total=total+$5 }
	END { media=total/NR; print "cantidad total: " total ;
		print "paga media : " media ;
		print "programa ejecutado ..." }'
exit 0

Funciones incorporadas

  • length(x): Devuelve la longitud del argumento
  • match(s,r): Devuelve la posición de s en donde ocurre r, comenzando desde 1. Si no existe devuelve 0.
  • substr(s,m,n): Devuelve la subcadena de s que comienza en la posición m y finaliza en la n.
  • sub(r,t,s): Sustituye t por la primera ocurrencia de r en la cadena s.
  • index(s1,s2): Devuelve la posición de la cadena s1 en donde se encuentra la cadena s2.
  • toupper(s): Devuelve la cadena s convertida a mayúsculas.
  • tolower(s): Devuelve la cadena s convertida a minúsculas.
  • system(cmd): Ejecuta el comando UNIX cmd especificado y retorna el estado de salida de este.
  • rand(): Devuelve un número aleatorio entre 0 y 1
  • Funciones matemáticas: sqrt(x), log(x), exp(x), int(x), cos(x) sin(x), atan(x).

Ejemplos

Shell script para matar todos los procesos del usuario activo cuyo nombre sea pasado como argumentos
#!/bin/bash
proceso=$1
ps –ef | 
awk '$1~/’$USER’/&&$8~/’$proceso’/&& $8!~/awk/ {print $2}‘ | 
xargs kill –9
Imprime la lista de frecuencia de las palabras del fichero pasado en el primer argumento ($1)?
#!/bin/bash
awk '# Imprime lista de frecuencias de palabras
{ for (i = 1; i <= NF;i++) frecuencia[$i]++}
END {for (p in frecuencia) print "Palabra " p ": "frecuencia[p]}' 	$1
exit 0
Imprimir todas las líneas que tengan más de 80 caracteres.
awk ‘length($0) > 80’ fichero

También te puede interesar

Programación con bash
Programación con bash 2
Programación con bash: comandos
Comandas con el editor vim
Comandas para comprimir/descomprimir archivos en linux
Última modificación: 22/09/2012