Shell Iñaki Domínguez
página 1 de 26
COMANDOS
BÁSICOS
DE LA SHELL
Shell Iñaki Domínguez
Principales shell
Bourne Shell (sh)
Fue durante muchos años el Shell patrón del sistema operativo Unix.
Korn Shell (ksh)
Es un superconjunto del sh, o sea, posee todas las facilidades del sh y a ellas se agregaron muchas otras.
Boune Again Shell (bash)
Este es el Shell mas moderno y cuyo número de adeptos crece mas en todo el mundo, sea por ser el Shell default de Linux, su sistema operativo natural, o sea por su gran diversidad de comandos, que incorpora inclusive diversas instrucciones características del C Shell.
C Shell (csh)
Es el Shell mas utilizado en ambientes *BSD e Xenix. La estrutura de sus comandos es bastante similar al del lenguage C. Su gran pecado fue ignorar la compatibilidad con el sh, partiendo por un camino propio.
AsignacionesSi el Shell encuentra dos campos separados por un símbolo de igual (=) sin espacios en blanco entre ellos, identifica esta secuencia como una asignación.
Ejemplos:
$ valor=1000
Comandos
Proceso de ejecución
Cuando se escribe una línea en el prompt de Linux, esta es dividida en pedazos separados por espacios en blanco: el primer pedazo es el nombre del programa y su existencia sera comprobada; identifica en seguida, en este orden: opciones/parámetros, redireccionamentos y variables.
Si el programa identificado existe, el Shell verifica los permisos de los archivos involucrados (inclusive el propio programa), dando un señal de error en caso de que tu no estés autorizado a ejecutar esta tarea.
Resolución de Redireccionamentos
Después de identificar los componentes de la línea que tecleaste, el Shell parte para la resolución de redireccionamentos. El Shell tiene incorporado a su elenco de ventajas lo que llamamos el redireccionamento, que puede ser de entrada (stdin), de salida (stdout) o de errores (stderr), de acuerdo a como te explicaré a continuación.
página 2 de 26
Shell Iñaki Domínguez
Substitución de variables
En este punto, el Shell verifica si las eventuales variables (parámetros comenzados por $), encontradas en el campo del comando, están definidas y las substituye por sus valores actuales.
Substitución de Meta caracteres
Si algún metacaracter (*, ? ou []) es hallado en la línea de comando, es aquí que será substituido por sus posibles valores.
Ejemplo:
$ cd n*
Pasa línea de Comando para el kernel
Completadas las anteriores tareas, el Shell monta la línea de comandos, ya con todas las substituciones hechas, llama el kernel para ejecutarla en un nuevo Shell (Shell hijo), recibiendo un número de proceso (PID o Process IDentification) y permanece inactivo, durmiendo una siestecita, durante la ejecución del programa. Una vez finalizado este proceso (junto con el Shell hijo), recibe nuevamente el control y, exhibiendo un prompt, muestra que está listo para ejecutar otros comandos.
Caracteres que cambian el significado
Cuando deseamos que el Shell no interprete un carácter especial, debemos "esconderlo" de él. Eso puede hacerse de tres formas distintas:
Apóstrofe o plic (')
Cuando el Shell ve una cadena de caracteres entre apostrofes ('), él saca los apostrofes de la cadena y no interpreta su contenido.
$ ls linux* linuxmagazine $ ls 'linux*' bash: linux* no such file or directory
En el primer caso el Shell "abrió" el asterisco y descubrió el archivo linuxmagazine para listar. En el segundo, los apostrofes evitaron la interpretación del Shell y dio la respuesta que no existe el archivo linux*.
Contrabarra o Barra Invertida (\)
Idéntico a los apostrofes excepto que la barra invertida evita la interpretación del carácter que la sigue solamente.
Ejemplo:
$ rm \* Elimina el directorio llamado * (asterisco), algo que no puede hacerse de la →forma rm * que eliminaría todos los directorios.
Aspas (")
Exactamente igual a apostrofe excepto que, si la cadena entre aspas contiene un signo de dolar ($), un acento invertido (`), o una barra invertida (\), estos caracteres serán interpretados por el Shell.
página 3 de 26
Shell Iñaki Domínguez
Caracteres de redireccionamento
Redireccionamiento de salida patrón
Para especificar una salida de programa usamos el > (mayor que) o el >> (mayor, mayor) seguido del nombre del archivo al que se desea mandar la salida.
Utilizando > eliminamos el contenido existente del fichero al que volcamos los datos.
Utilizando >> añadimos el nuevo contenido al ya existente en el fichero.
Redireccionamiento de entrada patrón
Para hacer el redireccionamento de la Entrada Patrón usamos el < (menor que).
Redireccionamiento here document
Es representado por << (menor menor) y sirve para indicar al Shell que el alcance de un comando comenza en la línea siguiente y termina cuando encuentra una línea cuyo contenido sea unicamente la etiqueta que sigue al símbolo <<.
Ejemplo:
ftp -ivn hostremoto << fimftp Aquí comienza← user $Usuario $Seña binary get archivoremotofimftp Aquí termina←
Uso de $$
El $$ contiene el PID, o sea, el número de su proceso. Como Linux es multiusuario, es de buenos modales anexar siempre el $$ a los nombre de los archivos que serán usados por varias personas para que no haya problemas de propriedad, o sea, en caso que nombrases tu archivo simplemente como seraqueexiste, el primero que lo usase (creándolo entonces) seria su dueño y todos los otros obtendrian un error cuando intentasen grabar algo en él.
/dev/null
En Unix existe un archivo fantasma denominado /dev/null. Todo lo que es enviado a este archivo desaparece.
Redireccionamento de la Salida de Error Patrón
Para redireccionar los errores se utiliza 2> NombreDelFichero.
Redireccionamento de Comandos o Tubería
Redirecciona la salida de un comando hacia la entrada de otro.
Ejemplo:
$ ls | wc -l
página 4 de 26
Shell Iñaki Domínguez
Caracteres de Ambiente
Priorizar
En Shell lo que prioriza realmente son los acentos graves (`).
Ejemplo:
$ echo "Existen `who | wc -l` usuarios conectados" Existen 8 usuarios conectados Para eliminar esa cantidad de espacios en blancos antes del 8 que el wc -l produjo, basta sacar las aspas. Así:
$ echo Existen `who | wc -l` usuarios conectados Existen 8 usuarios conectados
Si el ejemplo anterior lo hiciéramos así:
$ echo "Existen who | wc -l usuarios conectados"
el resultado obtenido en pantalla sería:
Existen who | wc -l usuarios conectados
Otro ejemplo:
$ Archs=`ls`o también$ Archs=$(ls) almacenaría en una variable el resultado de ejecutar el comando ls. Obsérvese la necesidad de priorizar la ejecución del comando para luego asignar su resultado a la variable.
Para ver el resultado podemos ejecutar:
$ echo $Archs
-rw-r--r-- 1 jneves jneves 19 May 24 19:41 arch1 -rw-r--r-- 1 jneves jneves 23 May 24 19:43 arch2 -rw-r--r-- 1 jneves jneves 1866 Jan 22 2003 archl
Como podemos observar el resultado lo intenta mostrar en una sola línea. Para separarlo en las varias líneas dejaremos que el shell vea los espacios en blanco y cuando haya varios en blanco los sustituya por uno solo. Para ello protegemos la variable de la interpretación de shell de esta manera:
$ echo "$Archs"
-rw-r--r-- 1 jneves jneves 19 May 24 19:41 arch1
-rw-r--r-- 1 jneves jneves 23 May 24 19:43 arch2
-rw-r--r-- 1 jneves jneves 1866 Jan 22 2003 archl
Agrupar comandos en una misma línea
Para agrupar comandos en una misma línea tenemos que separarlos por punto y coma. De esta forma:
$ pwd ; cd /etc; pwd; cd -; pwd /home/midir /etc/ /home/midir
página 5 de 26
Shell Iñaki Domínguez
Uso de paréntesis
Con el uso de paréntesis se llama a un nuevo Shell para ejecutar los comandos que están en su interior.
Ejemplo:
$ (pwd ; cd /etc ; pwd;)
/home/midir
/etc/
$ pwd /home/midir
Paso de parámetros
El paso de parámetros se hace dejando espacios en blanco entre el comando y entre ellos.
Ejemplo:
$ bash prueba.sh
En este ejemplo llamamos al comando bash al que pasamos como parámetro prueba.sh (un script para que lo ejecute)
A su vez podemos hacer que el script test.sh reciba unos parámetros y los muestre. El código del script puede ser el siguiente:
#! bin/bash
# programa para verificar el paso de parámetros
echo "1º parametro -> $1"
echo "2º parametro -> $2"
echo "3º parametro -> $3"
echo Nombre del programa: $0
echo Parámetros pasados: $#
echo Todos los parámetros pasados: $*
Para ejecutar el script lo haríamos de la siguiente forma:
$ bash test.sh HOLA “Esto es una” prueba
y el resultado obtenido sería:
1º parametro -> HOLA
2º parametro -> “Esto
3º parametro -> es
Nombre del programa: test.sh
Parámetros pasados: 5
Todos los parámetros pasados: HOLA “Esto es una” prueba
Significado de las Principales Variables Referentes a los Parámetros
Variable Significado
$0 Contiene el nombre del programa
página 6 de 26
Shell Iñaki Domínguez
Significado de las Principales Variables Referentes a los Parámetros
$# Contiene la cuantidad de parámetros pasados
$* Contiene el conjunto de todos los parámetros (muy parecido con $@)
Comandos condicionales
Echo $? nos devuelve el valor booleano de la última instrucción ejecutada. El resultado será 0 si se ejecutó correctamente y en caso contrario será diferente de cero.
Ejemplo:
$ ls -l
total 48
-rw-rw-r-- 1 inaki inaki 112 feb 27 22:22 fichero
-rw-rw-r-- 1 inaki inaki 21 feb 27 22:35 numeros
-rw-rw-r-- 1 inaki inaki 11 feb 27 22:35 pares
-rwxrwxr-x 1 inaki inaki 282 feb 27 21:41 test.sh
$ echo $?
0
El comando if
Lo que nuestro comando condicional if hace es testar la variable $?.
Sintaxis:
if cmd then cmd1 cmd2 cmdn else cmd3 cmd4 cmdm fi
Ejemplo
Con el siguiente script comprobamos si un usuario pasado como parámetro está logeado en el sistema.
if who | grep $1 > /dev/null
then
echo $1 está logado
else
echo $1 no se encuentra en la vecindad
página 7 de 26
Shell Iñaki Domínguez
fi
El comando Case
Sirve para seleccionar una opción en función del resultado de una expresión.Sintaxis:
case $var inpatrón1) cmd1
cmd2cmdn ;;
patrón2) cmd1cmd2cmdn ;;
patrónn) cmd1cmd2cmdn ;;
esac
La variable $var es comparada a los patrones patrón1, ..., patrónn y en el caso de que uno de ellos coincida, el bloque de comandos cmd1, ..., cmdn correspondiente será ejecutado hasta que encuentre un doble punto y coma (;;), en donde el flujo del programa se desviará hacia la instrucción inmediatamente siguiente, o sea el esac.
Ejemplo:case $opc in
1) inclusión ;;2) exclusión ;;3) alteración ;;4) exit ;;*) echo Digite una opción entre 1 y 4
esac
Comandos de LOOP o lazo
Son los comandos for, while y until.
El comando for
Es una instrucción intrínseca del Shell.
El comando for no usa listas separadas por espacios en blanco, sino por el contenido de la
página 8 de 26
Caracteres Para Formación de Patrones
Carácter Significado* Cualquier carácter ocurriendo cero o más
veces
? Cualquier carácter ocurriendo una vez
[...] Lista de caracteres
¦ O lógico
Shell Iñaki Domínguez
variable $IFS.
1ª Sintaxis:
for var in val1 val2 ... valndo
cmd1cmd2cmdn
done
2ª Sintaxis:for vardo
cmd1cmd2cmdn
done
En este caso, var asumirá uno a uno cada uno de los parámetros pasados para el progama.
3ª Sintaxis:for ((var=ini; cond; incr))do
cmd1cmd2cmdn
donedonde
var=ini - Significa que la variable var comenzará a partir de un valor inicial ini;cond - Significa que el loop o lazo del for será ejecutado en cuanto la var no cumpla
la condición cond;incr - Significa el incremento que la variable var sufrirá en cada pasada del loop.
página 9 de 26
Shell Iñaki Domínguez
El comando while
En programación Shell, el bloque de comandos es ejecutado en cuanto que un comando sea verdadero.Sintaxis:
while comandodo
cmd1cmd2...cmdn
done
El comando until
Ejecuta el bloque del loop hasta que el comando este bien ejecutado.
Sintaxis:
until comandodo
cmd1cmd2...cmdn
done
Ejemplo:
$cat llegada.sh #!/bin/bash
página 10 de 26
Expansión Aritmética
Expresión Resultado
id++ id-- pós-incremento y pós-decremento de variables
++id -–id pré-incremento y pré-decremento de variables
** exponenciación
* / % multiplicación, división, resto de la división
+ - adición, substraccuión
<= >= < > comparación
== != igualdad, desigualdad
&& Y lógico
|| O lógico
Shell Iñaki Domínguez
until who | grep julio
do
sleep 30
done
echo $(date "+ El %d/%m a las %H:%Mh") >> haragán.log
Atajos del do
Variable del sistema $IFS
IFS significa Inter Field Separator o, traducido, separador entre campos.Consta de los caracteres <espacio> <TAB> y <ENTER>.
Funciones
Las funciones permiten definir un código que se ejecutará al llamar a dicha función.Puede recibir parámetros y dar un resultado.function NombreFuncion () { # Línea de comentario local variable=100 # Define una variable local return # Sale de la función }
La palabra “function” puede aparecer o no. No es obligatorio su uso.
página 11 de 26
Shell Iñaki Domínguez
Programas
La estructura en bloques de un programa es el siguiente:
El comando Source
El comando source, también conocido por . (punto), hace que no sea creado un nuevo Shell (un subshell) para ejecutar el programa que le es pasado como parámetro.
Principales Variables del Shell
página 12 de 26
Variables Globales
Funciones
Cuerpo del Programa
Shell Iñaki Domínguez
Extensión de Parámetros
página 13 de 26
Principales variables del Bash
Variable Contenido
CDPATH Contiene los caminos que serán recorridos para intentar localizar un directório especificado. A pesar de ser esta variable poco conocida, su uso debe ser incentivado por que nos ahorra mucho trabajo, principalmente en instalaciones con estructuras de directórios con bastante niveles.
HISTSIZE Limita el número de instrucciones que caben dentro del archivo histórico de comandos (normalmente .bash_history pero efectivamente es lo que está almacenado en la variable $HISTFILE). Su valor default es 500.
HOSTNAME El nombre del host actual (que también puede ser obtenido con el comando uname -n).
LANG Usada para determinar el idioma hablado en el país (más especificamente categoria de locale).
LINENO El número de la línea del script o de la función que está siendo ejecutada, su uso principal es para dar mensajes de error juntamente con las variables $0 (nombre del programa) y $FUNCNAME (nombre de la función en ejecución)
LOGNAME Almacena el nombre de login del usuário.
MAILCHECK Especifica, en segundos, la frecuencia con que el Shell verificará la presencia de correspondencia en los archivos indicados por las variables $MAILPATH o $MAIL. El tiempo patrón es de 60 segundos. Una vez que este tiempo expira, el Shell hará esta verificación antes de exhibir el próximo prompt primario (definido en $PS1). Si esta variable estuviera sin valor o con un valor menor o igual a cero, la verificación de nueva correspondencia no será efectuada.
PATH Caminos que serán recorridos para intentar localizar un archivo especificado. Como cada script es un archivo, en el caso de que uses el directorio actual (.) en su variable $PATH, no necesitarás usar el ./scrp para que scrp sea ejecutado. Basta hacer scrp. Este es el modo en que procedo aqui en el Bar.
PIPESTATUS Es una variable del tipo vector (array) que contiene una lista de valores de código de retorno del último pipeline ejecutado, o sea, un array que abriga cada uno de los $? de cada instrucción del último pipeline.
PROMPT_COMMAND
Si esta variable recibe una instrucción, cada vez que tu des un <ENTER> directo en el prompt principal ($PS1), este comando será ejecutado. Es útil cuando se está repitiendo mucho una determinada instrucción.
PS1 Es el prompt principal. En "Conversa de Bar" usamos sus defaults: $ para el usuário común y # para el root, pero es muy frecuente que esté personalizado. Una curiosidad es que existen hasta concursos de quien programa el $PS1 más creativo. (clique para dar una googlada)
PS2 También llamado prompt de continuación, es aquél signo de mayor (>) que aparece después de un <ENTER> sin que el comando haya sido finalizado.
PWD Posee el camino completo ($PATH) del directório actual. Tiene el mismo efecto que el comando pwd.
RANDOM Cada vez que esta variable es llamada, devuelve un número entero, que es un número randómico entre 0 y 32767.
REPLY Usa esta variable para recuperar el último campo leído, en caso de que no tenga ninguna variable asociada.
SECONDS Esta variable contiene la cantidad de segundos en que el Shell actual está en uso. Úsala solamente para mostrar a un usuario aquello que llaman de sistema operacional, pero necesita
de frecuentes boots.
TMOUT Si tuviera un valor mayor que cero, este valor será tomado como el patrón de timeout del comando read. En el prompt, este valor es interpretado como el tiempo de espera a una acción antes de finalizar la sesión. Suponiendo que la variable contenga 30, el Shell dará logout 30 segundos después que el prompt esté sin ninguna acción.
Shell Iñaki Domínguez
Señales de proceso
Matar un proceso
Para matar un proceso se usa el comando kill.
Sintaxis:
kill -sig PID
página 14 de 26
Expansión de parámetros
Expresión Resultado esperado
${var:-padrón} Si var no tiene valor, el resultado de la expresión es padrón
${#cadena} Tamaño de $cadena
${cadena:posición} Extrae una sub-cadena de $cadena a partir de posición. Origen cero
${cadena:posición:tamaño}
Extrae una sub-cadena de $cadena a partir de posición con tamaño igual a tamaño. Origen cero
${cadena#expr} Corta la menor ocurrencia de $cadena a la izquierda de la expresión expr
${cadena##expr} Corta la mayor ocurrencia de $cadena a la izquierda de la expresión expr
${cadena%expr} Corta la menor ocurrencia de $cadena a la derecha de la expresión expr
${cadena%%expr} Corta la mayor ocurrencia de $cadena a la derecha de la expresión expr
${cadena/subcad1/subcad2}
Cambia en $cadena la primera ocurrencia de subcad1 por subcad2
${cadena//subcad1/subcad2}
Cambia en $cadena todas las ocurrencias de subcad1 por subcad2
${cadena/#subcad1/subcad2}
Si subcad1 es igual al inicio de $cadena, entonces es cambiada por subcad2
${cadena/%subcad1/subcad2}
Si subcad1 s igual al fin de $cadena, entonces es cambiada por subcad2
Shell Iñaki Domínguez
trap
Permite asociar una secuencia de comandos a una señal, es decir que ciertos programas se ejecuten cuando bash recibe cierta señal.
Ejemplo:
trap "rm *.err" SIGTERM
hará que el comando rm *.tmp se ejecute cuando bash reciba la señal SIGTERM.
Named Pipes
Son ficheros que responden a la filosofía FIFO.
Sintaxis:
Los archivos tipo named pipe son mostrados por el comando "ls" como cualquier otro precediendo una p al comienzo de su descripción de atributos.
En los sistemas modernos los ficheros pipe se cean con mkfifo. EL programa mkfifo recibe uno o mas nombres como argumento y crea pipes con esos nombres.
página 15 de 26
Señales más importantes
Señal Generado por
0 EXIT Finalización normal del progama
1 SIGHUP Cuando recibe un kill -HUP
2 SIGINT Interrupción por teclado (<CTRL+C>)
3 SIGQUIT Interrupción por teclado (<CTRL+\>)
5 SIGTERM Cuando recibe un kill o un kill -TERM
Shell Iñaki Domínguez
Lista de comandos
ls
Lista los ficheros y directorios a partir de la ruta en la que nos encontremos.
Atributos:
-l:
-a:
cd
Sirve para cambiar de directorio.
Sintaxis:
cd ruta
echo
Se encarga de repetir o desplegar en la salida estándar cualquier argumento que se le indíque (inclusive comodínes), para posteriormente saltar una línea.
Sintaxis:
echo argumento
cat
Es una instrucción que lista el contenido del archivo especificado para la Salida Patrón (stdout). En el caso que la entrada no esté definida, espera los datos de la stdin.
Ejemplo:
cat > archivo Envía→
wc
Atributos:
-l: cuenta las líneas de un fichero de entrada
pwd
grep
En entornos Unix existen tres comandos:
• El grep puede o no, usar expresiones regulares simples, sin embargo en caso de no usarlas, el fgrep es mejor, por ser más rápido;
• El egrep ("e" de extended, extendido) es muy poderoso en el uso de expresiones regulares. Por ser el más lento de la familia, solo debe ser usado cuando sea necesario la construcción de una expresión regular que no sea aceptada por el grep;
• El fgrep ("f" de fast, rápido, o de "file", archivo) como el nombre dice, es el rapidito de
página 16 de 26
Shell Iñaki Domínguez
la familia, ejecuta el servicio de forma muy veloz (a veces es cerca de 30% más rápido que el grep y 50% más que el egrep), sin embargo no permite el uso de expresiones regulares en la búsqueda.
En Linux el grep es siempre más veloz, ya que los otros dos (fgrep y egrep) son scripts en Shell que llaman al primero.
Parámetros:
-i: sirve para ignorar entre minúsculas y mayúsculas
-v: lista todos los registros de la entrada, excepto el(los) localizado(s) por el comando
-q: sirve para transformar el comando en silencioso
Ejemplo de uso:
Para mostrar los enlaces existentes en el directorio actual podemos ejecutar:
$ ls -l | grep '^l'
Así, para descubrir todos los archivos ejecutables en un determinado directorio debería hacer:$ ls -la | egrep '^-..(x|s)' -rwxr-xr-x 1 root root 2875 Jun 18 19:38 rc -rwxr-xr-x 1 root root 857 Aug 9 22:03 rc.local -rwxr-xr-x 1 root root 18453 Jul 6 17:28 rc.sysinitObtendríamos el mismo resultado si hiciéramos:
$ ls -la | grep '^-..[xs]'
sort
Ordena las líneas de un fichero pasado como argumento.
Ejemplo:
$ sort ficheroSi queremos que ordene las líneas del propio fichero podemos hacerlo de la siguiente manera:$ sort fichero -o fichero
mv
Mueve o renombra un fichero.
Ejemplo:
Para mover el fichero prueba al directorio temporal...
$ mv hola /tmp/holaPara renombrar un fichero... mv nombre_original nombre_final
$ mv hola prueba
cut
Esta instrucción es usada para cortar un determinado pedazo de un archivo y tiene dos formas distintas de uso:
El comando cut con la opción -c
Con esta opción, el comando tiene la siguiente sintáxis:
cut -c PosIni-PosFin [archivo]
Donde:
página 17 de 26
Shell Iñaki Domínguez
PosIni = Posición inicial PosFin = Posición final
El comando cut con la opción -f
-f, --fields=LIST Selecciona sólo estos campos; también imprime cualquier línea que no contenga un
delimitador, a no ser que la opción -s esté especificada.Ejemplo:Si tenemos un fichero llamado registro con las siguientes líneas:
linea 1:esta es la línea 1 linea 2:esta es la línea 2 linea 3:esta es la línea 3 linea 4:esta es la línea 4
y ejecutamos:$ cut -f1 -d: fichero linea 1 linea 2 linea 3 linea 4 $ cut -f2 -d: fichero esta es la línea 1 esta es la línea 2 esta es la línea 3 esta es la línea 4
paste
Como ya era de esperar, el comando paste sirve para pegar, sólo que aquí en Shell lo que pega son archivos.
Argumentos:
-s: pega los ficheros a continuación uno del otro en lugar de en paralelo
Usando separadores
El separador por defecto es TAB pero se puede cambiar con el parámetro -d como en el siguiente ejemplo:
$ paste -s -d'+' pares # también podría ser -sd'+' 2+4+6+8+10Si esto lo pasamos a la calculadora por medio de una tubería:$ paste -s -d'+' pares | bc30
seq
Imprime una secuencia de números.
Argumentos:
- final
- inicio final
- inicio incremento final
Ejemplo:
página 18 de 26
Shell Iñaki Domínguez
$ seq 10 > enteros$ seq 5 10 > enteros_del_5_al_10$ seq 2 2 10 > pares
tr
Sirve para substituir, comprimir o retirar caracteres.
Su sintaxis sigue el siguiente patrón:
tr [opciones] cadena1 [cadena2]
Principales Opciones del comando tr Opción Significado
-d Elimina del archivo los caracteres de la cadena1
-s Comprime n coincidencias de la cadena1 en sólo unaEjemplo:
$ echo bobo | tr o a
baba
Escape Sequences
Secuencia Significado Octal
\t Tabulación \011
\n Nueva línea \012
\v Tabulación Vertical \013
\f Nueva Página \014
\r Início de línea <^M> \015
\\ Una barra invertida \0134
who
Sirve para mostrar los usuarios logeados en el sistema.
date
Sirve para mostrar o ajustar la fecha y hora del sistema.
test
En Shell para verificar condiciones, usamos el comando test, sólo que este es mucho más poderoso de lo que estamos habituados. Primero te voy a mostrar las principales opciones
(existen muchas otras), para verificar la existencia de archivos en el disco:
página 19 de 26
Opciones del Comando test para archivos
Opción Verdadero si:-e arch arch existe-s arch arch existe y tiene tamaño mayor que cero
-f arch arch existe y es un archivo regular-d arch arch existe y es un directorio
-r arch arch existe y con derechos de lectura-w arch arch existe y con derechos de escritura
-x arch arch existe y con derechos de ejecución
Shell Iñaki Domínguez
Ejemplo:
Creamos un directorio si no existe y lo abrimos.
if test -d lmbthen
cd lmbelse
mkdir lmbcd lmb
fi
El mismo ejemplo pero optimizado.
if test ! -d lmbthen
mkdir lmbficd lmb
También es posible sustituir el comando test por [] de esta manera:
if [ ! -d lmb ]
página 20 de 26
Opciones del comando test para cadenas de caracteres
Opción Verdadero si:-z cadena Tamaño de cadena es cero
-n cadena Tamaño de cadena es mayor que cerocadena La cadena cadena tiene tamaño mayor que cero
c1 = c2 Cadena c1 y c2 son idénticasOpciones del comando test para números
Opción Verdadero si: Significadon1 -eq n2 n1 y n2 son iguales equaln1 -ne n2 n1 y n2 no son iguales not equaln1 -gt n2 n1 es mayor que n2 greater thann1 -ge n2 n1 es mayor o igual a n2 greater or equaln1 -lt n2 n1 es menor que n2 less thann1 -le n2 n1 es menor o igual a n2 less or equal
Operadores
Operador FinalidadParéntesis ( ) Agrupar
Admiración ! Negar-a Y lógico-o O lógico
Shell Iñaki Domínguez
thenmkdir lmb
ficd lmb
Puede ser substituído por un par de paréntesis rectos ([ ]), separados por espacios en blanco entre los argumentos, lo que aumentará la legibilidad, pues el comando if quedara con una sintáxis parecida a la de otros lenguajes.
Diferencia entre números y cadenas.
cad1=1 cad2=01 if test $cad1 = $cad2 then echo Las variables son iguales. else echo Las variables son diferentes. fi
Ejecutando el fragmento del programa arriba, resulta:
Las variables son diferentes.
Vamos a modificarlo un poco, de manera que la comparación esta vez sea numérica:
cad1=1 cad2=01 if test $cad1 -eq $cad2 then echo Las variables son iguales. else echo Las variables son diferentes. fi
Y lo ejecutamos nuevamente:
Las variables son iguales.
Otro ejemplo más complicado editado sobre el prompt:
$ Familia=felina
$ Genero=gato
$ if test $Familia = canina -a $Genero = lobo -o $Familia = felina -a $Genero = leon
> then
> echo Cuidado
> else
> echo Se puede acariciar
> fi
Se puede acariciar
En caso de que el animal fuera de la familia canina Y ( -a ) del género lobo, O ( -o ) de la familia felina Y ( -a ) del género león, se daría un aviso de alerta, en caso contrario el mensaje sería de incentivo.
página 21 de 26
Shell Iñaki Domínguez
let
Asigna un valor a una variable.
read
Captura el texto desde la fuente de entrada, por defecto el teclado.
Sintaxis:
$ read – p “mensaje a mostrar” var
Ejemplo:
Para capturar el texto introducido desde el teclado y almacenarlo en la variable tit
$ read -p “Introduzca el texto:” tit
clear
Limpia la pantalla del contenido existente.
tput
Se usa principalmente para posicionar el cursor en la pantalla. Sin embargo también se usa para borrar datos de la pantalla, conocer el número de líneas y columnas de la pantalla, posicionar correctamente un campo, borrar un campo cuya entrada se detectó como error, etc.
página 22 de 26
Opciones del comando read en Bash
Opción Acción-p prompt Escribe el prompt antes de hacer la lectura-n num Lee hasta num caracteres-t seg Espera seg segundos para que concluya la lectura-s Lo que está siendo tecleado no aparece en la pantalla
Shell Iñaki Domínguez
printf
Sirve para formatear la salida.Sintaxis:printf formato [argumento...]donde formato es una cadena de caracteres que contiene 3 tipos de objetos:
1. caracteres simples; 2. caracteres para especificación de formato; 3. secuencia de escape en el patrón del lenguaje C.
Cada uno de los caracteres utilizados para especificación de formato está precedido por el carácter % y luego viene la especificación de formato de acuerdo con la tabla:
página 23 de 26
Principales Opciones del Comando tput
Opciones de tput
Efecto
cup lin col CUrsor Position - Posiciona el cursor en la línea lin y columna col. El origen es cero
bold Coloca la pantalla en modo de realce
rev Coloca la pantalla en modo de vídeo inverso
smso Idéntico al anterior
smul A partir de esta instrucción, los caracteres tecleados aparecerán sublineados en la pantalla
blink Los caracteres tecleados aparecerán intermitentes
sgr0 Después de usar uno de los atributos de arriba, se usa este para restaurar la pantalla a su modo normal
reset Limpia la pantalla y restaura sus definiciones de acuerdo con el terminfo o sea, la pantalla vuelve al patrón definido por la variable $TERM
lines Devuelve la cantidad de líneas de la pantalla en el momento de la instrucción
cols Devuelve la cantidad de columnas de la pantalla en el momento de la instrucción
el Erase Line - Borra la línea a partir de la posición del cursor
ed Erase Display - Borra la pantalla a partir de la posición del cursor
il n nsert Lines - Introduce n líneas a partir de la posición del cursor
dl n Delete Lines - Borra n líneas a partir de la posición del cursor
ech n Erase CHaracters - Borra n caracteres a partir de la posición del cursor
sc Save Cursor position - Graba la posición del cursor
rc Restore Cursor position - Coloca el cursor en la posición marcada por el último sc
Shell Iñaki Domínguez
Las secuencias de escape patrón del lenguaje C son siempre precedidas por una barra invertida (\) y las reconocidas por el comando printf son:
eval
El comando eval ejecuta la línea recibida en el shell, dando luego el resultado.
Sintaxis:
eval cmd
Ejemplos de uso:$ var1=3 $ var2=var1$ eval echo $`echo $var2`
página 24 de 26
Tabla de los Caracteres de Formatación del printf
Letra
La expresión será impresa como:
c imple caracter
d úmero en sistema decimal
e otación científica exponencial
f úmero con punto decimal (float)
g El menor entre los formatos %e y %f con supresión de los ceros no significativos
o úmero en sistema octal
s adena de caracteres
x úmero en sistema hexadecimal
% mprime un %. no existe ninguna conversión
Secuencias de Escape del printf
Secuencia Efecto
a Suena el bip
b Vuelve una posición (backspace)
f Salta para la próxima página lógica (form feed)
n Salta para el inicio de la línea siguiente (line feed)
r Vuelve para el inicio de la línea actual (carriage return)
t Avanza para la próxima marca de tabulación
Shell Iñaki Domínguez
3
getops
El comando getopts recupera las opciones y sus argumentos de una lista de parámetros de acuerdo con la sintáxis POSIX.2, o sea, letras (o números) después de un señal de menos (-) seguidas o no de un argumento; en el caso de tener solamente letras (o números) se pueden agrupar.Sintaxis:
getopts cadenadeopciones nombre
página 25 de 26
Shell Iñaki Domínguez
Enlaceshttp://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa001
http://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa002
http://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa003
http://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa004
http://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa005
http://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa006
http://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa007
http://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa008
http://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa009
http://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa10
http://wiki.softwarelivre.org/TWikiBar/TWikiBarConversa011
página 26 de 26
Top Related