COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas...

26
Shell Iñaki Domínguez página 1 de 26 COMANDOS BÁSICOS DE LA SHELL

Transcript of COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas...

Page 1: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

Shell Iñaki Domínguez

página 1 de 26

COMANDOS

BÁSICOS

DE LA SHELL

Page 2: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 3: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 4: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 5: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 6: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 7: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 8: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 9: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 10: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 11: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 12: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 13: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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.

Page 14: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 15: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 16: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 17: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 18: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 19: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 20: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 21: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 22: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 23: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 24: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 25: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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

Page 26: COMANDOS BÁSICOS DE LA SHELL · Este es el Shell mas moderno y cuyo número de adeptos crece mas en ... Cuando se escribe una línea en el prompt de Linux, esta es dividida en ...

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