0% encontró este documento útil (0 votos)
8 vistas15 páginas

Comandos Prácticas FS

Cargado por

Carmen Sánchez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
8 vistas15 páginas

Comandos Prácticas FS

Cargado por

Carmen Sánchez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

METACARACTERES

* (Asterisco):
● Descripción: Representa cualquier secuencia de cero o más caracteres.
● Uso: Permite buscar archivos con nombres que coincidan con cualquier secuencia de
caracteres.
● Ejemplo: ls *.txt
● Resultado: Mostrará todos los archivos que tengan una extensión ".txt", independientemente
del nombre que tengan.
[] (Corchetes):
● Descripción: Designan un carácter o rango de caracteres que representan un carácter simple a
través de una lista de caracteres o mediante un rango.
● Uso: Permite buscar archivos cuyos nombres coincidan con un conjunto específico de
caracteres.
● Ejemplo: ls *[0-9].txt
● Resultado: Mostrará todos los archivos que tengan un número en su nombre seguido de ".txt".
{} (Llaves):
● Descripción: Sustituyen conjuntos de palabras separadas por comas que comparten partes
comunes.
● Uso: Permite generar listas o secuencias de archivos de forma automática.
● Ejemplo: mv archivo{1,2,3}.txt destino/
● Resultado: Moverá los archivos "archivo1.txt", "archivo2.txt" y "archivo3.txt" al directorio
"destino/".
~:
● Descripción: Se usa para abreviar el camino absoluto (path) del directorio HOME.
● Uso: Permite referenciar el directorio HOME del usuario de manera abreviada.
● Ejemplo: cd ~/Documentos
● Resultado: Cambiará al directorio "Documentos" dentro del directorio HOME del usuario.
; (Punto y coma):
● Descripción: Separador entre órdenes que se ejecutan secuencialmente.
● Uso: Permite escribir dos o más órdenes en la misma línea, ejecutándolas secuencialmente.
● Ejemplo: ls -l ; pwd
● Resultado: Mostrará la lista detallada de archivos y luego imprimirá el directorio actual.
() (Paréntesis):
● Descripción: Se usan para aislar órdenes separadas por ";" o "|". Las órdenes dentro de los
paréntesis son tratadas como una única orden.
● Uso: Permite agrupar órdenes para aplicar sobre ellas otro metacarácter o para aislar un
conjunto de órdenes del resto de la línea de órdenes.
● Ejemplo: (ls -l ; pwd) | wc
● Resultado: Primero mostrará la lista detallada de archivos y luego imprimirá el número de
líneas, palabras y bytes del resultado.
&& (Y lógico):
● Descripción: Concatena dos órdenes de tal forma que la segunda se ejecuta solo si la primera
se ejecuta correctamente.
● Uso: Permite ejecutar una orden basada en el resultado exitoso de otra.
● Ejemplo: ls -l && pwd
● Resultado: Mostrará la lista detallada de archivos y luego imprimirá el directorio actual solo
si el comando ls -l falla.
|| (O lógico):
● Descripción: Concatena dos órdenes de tal forma que la segunda se ejecuta solo si la primera
no se ejecuta correctamente.
● Uso: Permite ejecutar una orden alternativa en caso de que la primera falle.
● Ejemplo: ls -l || pwd
● Resultado: Mostrará la lista detallada de archivos y luego imprimirá el directorio actual solo
si el comando ls -l falla.
ÓRDENES DE TERMINAL LINUX

ls:
● Descripción: Lista los contenidos de un directorio.
● Uso: Se utiliza para mostrar los archivos y subdirectorios dentro de un directorio específico.
● Ejemplo: ls -l
cd:
● Descripción: Cambia de directorio de trabajo.
● Uso: Permite moverse entre diferentes directorios del sistema de archivos.
● Ejemplo: cd directorio_destino
pwd:
●Descripción: Imprime el camino absoluto del directorio actual.
● Uso: Proporciona la ruta completa del directorio en el que te encuentras actualmente.
● Ejemplo: pwd
mkdir:
● Descripción: Crea un directorio a partir del nombre dado como argumento.
● Uso: Se utiliza para crear nuevos directorios en la ubicación especificada.
● Ejemplo: mkdir nuevo_directorio
rmdir:
● Descripción: Borra un directorio existente (si está vacío).
● Uso: Permite eliminar directorios vacíos del sistema de archivos.
● Ejemplo: rmdir directorio_a_borrar
cat:
● Descripción: Muestra el contenido de un archivo o varios, concatena archivos, copia un
archivo, crea un archivo de texto o muestra los caracteres invisibles de control.
● Uso: Se utiliza para mostrar el contenido de uno o más archivos en la terminal.
● Ejemplo: cat archivo.txt
cp:
● Descripción: Copia el archivo1 en el archivo2. Si archivo2 no existe, se crea.
● Uso: Permite copiar archivos de una ubicación a otra en el sistema de archivos.
● Ejemplo: cp archivo_origen archivo_destino
mv:
● Descripción: Renombra archivos y puede mover de lugar un archivo o directorio.
● Uso: Se utiliza para cambiar el nombre de un archivo o moverlo a una nueva ubicación.
● Ejemplo: mv archivo_origen archivo_destino
file:
● Descripción: Muestra el tipo de archivo dado como argumento.
● Uso: Proporciona información sobre el tipo de archivo especificado.
● Ejemplo: file archivo

more:
● Descripción: Visualiza un archivo fraccionándolo una pantalla cada vez.
● Uso: Permite visualizar el contenido de un archivo en la terminal, paginándolo para una
lectura más fácil.
● Ejemplo: more archivo.txt
rm:
● Descripción: Borra archivos y directorios con contenido.
● Uso: Se utiliza para eliminar archivos o directorios del sistema de archivos.
● Ejemplo: rm archivo.txt
touch:
● Descripción: Si existen los archivos dados como argumentos se modifican su fecha y hora. En
caso contrario, se crean con la fecha actual del sistema.
● Uso: Permite crear nuevos archivos vacíos o actualizar la fecha de los archivos existentes.
● Ejemplo: touch nuevo_archivo.txt
clear:
● Descripción: Borra el contenido del terminal actual.
● Uso: Limpia la pantalla de la terminal, eliminando todo el contenido visible.
● Ejemplo: clear
tail:
● Descripción: Muestra la parte final del contenido de un archivo dado como argumento.
● Uso: Permite visualizar las últimas líneas de un archivo en la terminal.
● Ejemplo: tail archivo.txt
head:
● Descripción: Muestra la parte inicial del contenido de un archivo dado como argumento.
● Uso: Permite visualizar las primeras líneas de un archivo en la terminal.
● Ejemplo: head archivo.txt
sort:
● Descripción: Ordena, según un criterio elegido (ver con man), el contenido de los archivos
dados como argumentos.
● Uso: Se utiliza para ordenar las líneas de texto de un archivo en orden alfabético o numérico.
● Ejemplo: sort archivo.txt

chmod:
● Descripción: Cambia los permisos de acceso a archivos en sistemas UNIX/Linux.
● Uso: Permite modificar los permisos de lectura, escritura y ejecución para el propietario, el
grupo y otros usuarios.
■ u (usuario): Representa al propietario del archivo.
■ g (grupo): Representa al grupo al que pertenece el archivo.
■ o (otros): Representa a los usuarios que no son el propietario ni están en el grupo.
■ a (todos): Representa a todos los usuarios.
Puedes asignar permisos de lectura (r), escritura (w), y ejecución (x) utilizando estas
letras junto con los operadores + (para añadir permisos) y - (para eliminar permisos).
Para utilizar chmod con permisos octales, debes utilizar números para representar los
permisos:
4: Permisos de lectura (read).
2: Permisos de escritura (write).
1: Permisos de ejecución (execute).
Puedes sumar estos números para asignar permisos y luego aplicarlos al archivo.

● Ejemplo: chmod u+x archivo.txt //


chmod 644 /home/usuario/documentos/archivo.txt ( Asigna permisos de lectura y
escritura al propietario, y solo permisos de lectura a grupo y otros usuarios.)
wc:
● Descripción: Cuenta líneas, palabras y caracteres en archivos.
● Uso: Proporciona estadísticas sobre un archivo, como el número de líneas, palabras y bytes.
● Ejemplo: wc archivo.txt
echo:
● Descripción: Muestra texto en la terminal.
● Ejemplo: echo "Hola, mundo"
env/printenv:
● Descripción: Muestra todas las variables de entorno (son comunes a todos los shells y sus
valores en la terminal.
● Ejemplo: env / printenv

set:
● Descripción: Muestra todas las variables de entorno, así como también otras variables y
funciones definidas en la sesión actual de la terminal (variables locales, solo visibles en la
shell donde se definen).
● Ejemplo: set
unset:
● Descripción: Se utiliza para eliminar una variable de entorno específica.
● Ejemplo: unset VARIABLE (donde "VARIABLE" es el nombre de la variable de
entorno que se desea eliminar). Por ejemplo: unset PATH eliminará la
variable de entorno PATH.
help:
● Descripción: Muestra información de ayuda sobre comandos integrados en la terminal de
Linux.
● Ejemplo: help variables (lista de variables propias del shell bash)
expr:
● Descripción: Evalúa expresiones aritméticas y de cadena de caracteres en la terminal.
● Uso: Útil para realizar operaciones matemáticas y manipular cadenas de texto en scripts de
Bash.
● Ejemplo: resultado= ‘expr 5 + 3’

declare:
● Descripción: Se utiliza para declarar variables y darles atributos específicos, como el tipo de
variable (local o global), la posibilidad de asignarles valores de solo lectura, exportabilidad y
si son matrices (vectores o listas). También se puede utilizar para ver los atributos de las
variables.
● Uso: Útil para definir variables con atributos especiales en scripts de Bash.
● Atributos:
-i: Indica que la variable es de tipo entero.
-r: Indica que la variable es de solo lectura.
-a: Indica que la variable es una matriz (vector o lista).
-x: Indica que la variable es exportable.
-p: Muestra los atributos de las variables.
● Ejemplo:

declare -i numero_entero=10 # Declara una variable como entero


declare -r CONSTANTE=3.14 # Declara una variable de solo lectura
declare -a colores=("rojo" "verde" "azul") # Declara una matriz de colores
declare -x VARIABLE_EXPORTABLE="valor" # Declara una variable exportable
declare -p # Muestra los atributos de todas las variables
export:
● Descripción: Se utiliza para marcar una variable como exportable, lo que significa que estará
disponible para los procesos secundarios.
● Uso: Útil cuando se desea que una variable esté disponible para los procesos secundarios.
● Ejemplo: export VARIABLE_EXPORTABLE="valor" #se puede poner en una línea
la definición y exportación de una variable
printf:
● Descripción: La orden printf es una utilidad en sistemas Unix y similares que permite
imprimir un mensaje en la pantalla utilizando un formato específico. Permite formatear la
salida de texto según ciertos requisitos, lo que la hace útil para mostrar información de
manera organizada y legible.
● Uso: La orden printf se utiliza cuando se necesita imprimir texto en la pantalla con un formato
particular. Puede ser útil en scripts, programas y en la línea de comandos para personalizar la
presentación de la salida de texto.
● Ejemplo: printf "El valor de PI es: %.2f\n" 3.14159. En este ejemplo, se
utiliza printf para imprimir el valor de PI con dos decimales de
precisión después del punto decimal. La cadena de formato %.2f indica
que se imprimirá un número de coma flotante (f) con dos dígitos de
precisión después del punto decimal (2).
● Secuencias de escape:
\b: Espacio atrás
\n: Nueva línea
\t: Tabulador
\': Carácter comilla simple
\\: Barra invertida
\0n: n = número en octal que representa un carácter ASCII de 8 bits
● Códigos de formato:
%d: Un número con signo
%f: Un número en coma flotante (decimal) sin notación exponencial
%q: Entrecomilla una cadena
%s: Muestra una cadena sin entrecomillar
%x: Muestra un número en hexadecimal
%o: Muestra un número en octal
Alias:
● Descripción: Permite crear atajos o alias para comandos largos o frecuentemente utilizados.
Estos alias permiten ejecutar comandos largos con un nombre más corto y fácil de recordar.
Además, dentro de un alias y entre comillas podemos poner varias órdenes separadas por “;”
de tal forma que se ejecutarán cada una de ellas secuencialmente. Sin embargo, si deseas
ejecutar la orden original sin que el alias tenga efecto, puedes preceder el nombre del alias
con una barra invertida (\).
● Uso: alias nombre="comando" . Donde nombre es el alias que se desea asignar y comando es
el comando original o la secuencia de comandos que se desea abreviar.
● Ejemplo: alias ll="ls -lF" Ahora, cuando se escriba ll en la línea de
comandos y se presione Enter, se ejecutará el comando ls -lF, mostrando
una lista detallada de archivos y directorios con indicadores.
Unalias:
● Descripción: Elimina alias previamente definidos. Esto permite eliminar atajos que ya no son
necesarios o que pueden estar causando conflictos.
● Ejemplo: unalias ll. En este ejemplo, se elimina el alias ll que se
definió anteriormente. Después de ejecutar este comando, el alias ll ya
no estará disponible y se deberá utilizar el comando original ls -lF
para obtener la misma funcionalidad.
Find:
● Definición: se utiliza para buscar archivos y directorios dentro de una estructura de
directorios que satisfacen los criterios especificados. Permite realizar búsquedas basadas en
nombres de archivo, tiempos de acceso, tipos de archivo, tamaños y otros atributos.
● Uso: find lista-de-directorios [expresiones] Donde lista-de-directorios es la lista de directorios
a buscar, y las expresiones son los operadores que describen los criterios de selección para los
archivos que se desea localizar y la acción que se quiere realizar cuando find encuentre dichos
archivos.
● Criterios: se especifican mediante una palabra precedida por un guion, seguida de un espacio
y por una palabra o número entero precedido o no por un + o un -. También se puede
especificar un operador u otro utilizando el operador -o. Este operador conecta dos
expresiones y se seleccionarán aquellos archivos que cumplan una de las dos expresiones.
Por el nombre del archivo: -name nombre_archivo El nombre_archivo puede
incluir la expansión de metacaracteres de archivo debidamente acotados.
Por el último acceso: -atime n, -atime +n, -atime -n
n representa el número de días.
+n busca archivos accedidos hace más de n días.
-n busca archivos accedidos hace menos de n días.
Por ser de un determinado tipo: -type tipo
● f para archivos regulares.
d para directorios.
Por su tamaño en bloques: -size n, -size +n, -size -n, -size nc
+n busca archivos de más de n bloques.
-n busca archivos de menos de n bloques.
nc busca archivos de exactamente n bytes si se añade la letra c.
● Acciones más comunes:
-print: Visualiza los nombres de camino de cada archivo que se adapta al criterio de
búsqueda. Es la opción por defecto.
-exec: Permite añadir una orden que se aplicará a los archivos localizados. Se utiliza
{} para representar el nombre de archivos localizados.
-ok: Similar a -exec, pero solicita confirmación en cada archivo localizado antes de
ejecutar la orden.
● Ejemplo: find . -size 10 -o -atime +2 busca archivos de 10 bloques o +2
días
grep:
● Descripción: La orden grep permite buscar cadenas en archivos utilizando patrones para
especificar dicha cadena. Lee de la entrada estándar o de una lista de archivos especificados
como argumentos y escribe en la salida estándar aquellas líneas que contengan la cadena.
● Opciones:
-x: Localiza líneas que coincidan totalmente, desde el principio hasta el final de línea,
con el patrón especificado.
-v: Selecciona todas las líneas que no contengan el patrón especificado.
-c: Produce solamente un recuento de las líneas coincidentes.
-i: Ignora las distinciones entre mayúsculas y minúsculas.
-n: Añade el número de línea en el archivo fuente a la salida de las coincidencias.
-l: Selecciona sólo los nombres de aquellos archivos que coincidan con el patrón de
búsqueda.
-e: Especial para el uso de múltiples patrones e incluso si el patrón comienza por el
carácter -.
● Variantes:
fgrep: Acepta solo una cadena simple de búsqueda en vez de una expresión regular.
egrep: Permite un conjunto más complejo de operadores en expresiones regulares.
● Ejemplo: grep "patrón" archivo.txt
date:
●Descripción: muestra la fecha y la hora actual o establece la fecha y la hora del sistema según
los argumentos proporcionados.
● Ejemplo: date
bc (calculadora de precisión arbitraria):
● Definición: Permite realizar cálculos matemáticos con una precisión arbitraria, lo que
significa que puede manejar números con un gran número de decimales. Además de las
operaciones básicas de suma, resta, multiplicación y división, bc también admite funciones
matemáticas avanzadas y operaciones lógicas. La opción -l en bc carga la biblioteca de
funciones matemáticas estándar. Al usar bc -l, se activan funciones matemáticas avanzadas
como seno, coseno, tangente, exponencial, logaritmos, entre otras.
● Ejemplo: echo "3.14 * 2.5" | bc .Este comando calculará el producto de
3.14 y 2.5 utilizando bc y mostrará el resultado por la salida
estándar.
let
● Descripción: Asigna valores a variables enteras y evalúa expresiones aritméticas en la shell
bash. Permite realizar operaciones aritméticas directamente en el shell. A ambos lados del
igual no debe haber espacios. Sigue el orden de las operaciones comunes
● Uso: (( <expresión> )) equivale a la orden let
● Ejemplos: let w=3+2
test
● Descripción: evalúa la expresión proporcionada y devuelve un estado de salida. Si la
expresión se evalúa como verdadera (true), la orden test devuelve un estado de salida de 0. Si
la expresión se evalúa como falsa (false) o si se proporciona un argumento no válido, t est
devuelve un estado de salida de 1.
● Uso: test expresión // [ expresión ] (los espacios son necesarios)
● Operadores:
-b archivo: Verdadero si existe y es un dispositivo de bloques.
-c archivo: Verdadero si existe y es un dispositivo de caracteres.
-d archivo: Verdadero si existe y es un directorio.
-e archivo: Verdadero si archivo existe.
-f archivo: Verdadero si existe y es un archivo plano o regular.
-G archivo: Verdadero si existe y es propiedad del mismo grupo del usuario.
-h archivo // -L archivo: Verdadero si archivo existe y es un enlace simbólico.
-O archivo: Verdadero si existe y es propiedad del usuario.
-r archivo: Verdadero si existe y el usuario tiene permiso de lectura sobre él.
-s archivo: Verdadero si existe y no está vacío.
-w archivo: Verdadero si existe y el usuario tiene permiso de escritura sobre él.
-x archivo: Verdadero si existe y el usuario tiene permiso de ejecución sobre él, o si
es un directorio y el usuario tiene permiso de búsqueda en él.
archivo1 -nt archivo2: Verdadero si archivo1 es más reciente que archivo2,
según la fecha de modificación, o si archivo1 existe y archivo2 no.
archivo1 -ot archivo2: Verdadero si archivo1 es más antiguo que archivo2,
según la fecha de modificación, o si archivo2 existe y archivo1 no.
archivo1 -ef archivo2: Verdadero si archivo1 es un enlace duro al archivo2, es
decir, si ambos se refieren a los mismos números de dispositivo e inode.
● Ejemplo: if test -e archivo.txt; then [ -w /bin ]
echo "El archivo existe." echo $?

if/else
● Descripción: ejecuta una lista de declaraciones dependiendo de si se cumple o no cierta
condición, y se podrá utilizar tanto en la programación de guiones, como en expresiones más
simples.
● Uso: if condición;
then declaraciones
[elif condición;
then declaraciones ]...
[else declaraciones ]
fi
● Ejemplo: if [ -d "$directorio" ]; then
echo "El directorio $directorio existe."
else
echo "El directorio $directorio no existe."
fi
TEORÍA
1. VARIABLES:
Para asignar valores a variables, se usa el nombre de la variable seguido de un signo igual y el valor deseado,
sin espacios alrededor del signo igual para evitar errores. Las variables pueden contener dígitos pero no
pueden empezar con uno. Para mostrar el valor de una variable se usa el comando "echo". Por ejemplo:
numero=1
echo $numero

Para crear variables de tipo vector, se utiliza la misma sintaxis, pero los elementos se encierran entre
paréntesis y se separan por espacios. Para acceder a un elemento del vector, se utiliza
"${nombre_vector[indice]}". Por ejemplo:

colores=(rojo azul verde)


echo ${colores[0]} # Muestra "rojo"
echo ${colores[1]} # Muestra "azul"

variables de entorno predefinidas:


$BASH: Contiene la ruta de acceso completa utilizada para ejecutar la instancia actual de bash.
$HOME: Almacena el directorio raíz del usuario; se puede emplear junto con la orden cd sin
argumentos para ir al directorio raíz del usuario.
$PATH: Guarda el camino de búsqueda de las órdenes, formado por una lista de todos los directorios
en los que se busca una orden.
$?: Contiene el código de retorno de la última orden ejecutada, ya sea una instrucción o un guion.

La sustitución de órdenes en Bash permite ejecutar comandos y usar su salida como si fuera el valor de una
variable. Se puede usar $(comando argumentos) o ‘comando argumentos’. Esta técnica es útil en
expresiones, incluyendo expresiones aritméticas. Por ejemplo:

echo "Los archivos que hay en el directorio son: $(ls -l)"


echo "Los archivos que hay en el directorio son: `ls -l`"

Cuando se quitan las comillas dobles del final y se colocan después de los dos puntos, o se sustituyen por
comillas simples, se afecta la interpretación de los caracteres especiales. Las comillas dobles ofrecen una
protección débil, excepto para !, $, , y `, mientras que las comillas simples ofrecen una protección fuerte,
excepto para !. Las comillas simples son útiles para proteger variables o comandos. Por ejemplo:

echo 'En el libro de inglés aparece Peter'\''s cat'

Si se usa echo sin escape en una cadena con comillas simples que contiene una comilla, se generará un
prompt para completar la orden. Para corregirlo, se debe escapar la comilla con \ o dividir la frase en dos
partes con comillas simples.

Podemos asignar el resultado de una orden a una variable utilizando el operador de comillas invertidas (`):
listadearchivos=`ls .`

Es importante tener en cuenta que algunas órdenes entre comillas invertidas pueden generar errores. Para
depurar, se puede utilizar $?, donde 0 indica una ejecución correcta y 1 un error.

Al intentar realizar operaciones aritméticas directamente en una asignación se debe utilizar la orden expr
para evaluar la asignación: numero=1

numero=`expr $numero + 1`
2. GUIONES

Los guiones en el shell (scripts o programas shell) son archivos de texto que contienen órdenes del shell y
del sistema operativo. Estos archivos se utilizan como guía para el shell sobre qué órdenes ejecutar. Para
ello, abriremos un editor de textos ascii (vi, kedit, gedit, emacs, xemacs, ...) y escribimos las ordenes a
ejecutar. Para ejecutar este script, escribimos en la terminal: bash nombre_doc
Esta orden, lanza un shell bash y le indica que lea las órdenes del guion de prueba, en lugar de usar el propio
terminal. De esta forma podemos automatizar procesos al liberar al usuario de estar escribiendo las órdenes.

Para ello, debemos poner siempre en la primera línea del archivo los símbolos #! seguidos del nombre del
programa del tipo de shell que deseamos ejecutar, para nuestro caso, /bin/bash. Con esto, nuestro ejemplo
anterior quedaría:
#!/bin/bash
printf "El directorio $HOME // $1 contiene los siguientes archivos:\n"
ls $HOME // ls $1 (si pasamos parámetros)

Ahora, podemos hacer nuestro archivo ejecutable (chmod +x prueba) con lo que la ejecución sería:
$ ./prueba

Variables de entorno definidas para los argumentos de un guión:

➢ `$0`: Nombre del guion o script que se ha llamado. Sólo se emplea dentro del guion.
➢ `$1 .. $9` y `${n}, n>9`: Son los distintos argumentos que se pueden facilitar al llamar a un guion.
Los nueve primeros se referencian con `$1`, `$2`, ..., `$9`, y a partir de ahí es necesario encerrar el
número entre llaves, es decir, `${n}`, para `n>9`.
➢ `$*`: Contiene todos los argumentos que se le han dado. Cuando va entre comillas dobles es
equivalente a “$1 $2 $3 … $n”.
➢ `$@`: Contiene todos los argumentos que se le han dado. Cuando va entre comillas dobles es
equivalente a “$1” “$2” … “$n”.
➢ `$#`: Contiene el número de argumentos que se han pasado al llamar al guion.
➢ `${arg:-val}`: Si el argumento tiene valor y es no nulo, continua con su valor, en caso contrario se le
asigna el valor indicado por val.
➢ `${arg:?val}`: Si el argumento tiene valor y es no nulo, sustituye a su valor; en caso contrario,
imprime el valor de val y sale del guion. Si val es omitida, imprime un mensaje indicando que el
argumento es nulo o no está asignado.

Como se ve en la tabla anterior, las variables numéricas nos permiten pasar argumentos a un guion para
adaptar su comportamiento, son los parámetros del guion. ./prueba nombre1 nombre2

Dentro del script, los parámetros se accederán a través de las variables $1, $2, y así sucesivamente. $1
contendrá el primer nombre pasado como parámetro, $2 contendrá el segundo nombre, y así sucesivamente.
Si un argumento va asociado a nombres de archivos o directorios y se usan los metacaracteres ya conocidos,
se sustituiría el argumento por tanto archivos/directorios que cumplieran el patrón (por ejemplo, dado un
directorio que contiene los archivos ar1.txt y ar2.txt, si un argumento es *.txt, lo consideraría como ar1.txt
ar2.txt). Por lo tanto, en lugar de un argumento pasaría a tener 2, es decir, $1=ar1.txt y $2=ar2.txt.

Para corregir errores en un guion, se puede utilizar:


● -n: Chequea errores sintácticos sin ejecutar el guion.
● -v: Visualiza cada orden del guion antes de ejecutarla.
● -x: Visualiza cada orden con sus variables sustituidas por sus valores.

bash –n ejemplo ejemplo: línea 3: EOF inesperado mientras se buscaba un `” coincidente


Para añadir comentarios al guión # texto (se desarrolla en otra práctica más adelante esto último)

3. Expresiones con variables

El shell bash proporciona dos formas de manejar expresiones aritméticas: la expansión aritmética, que se
realiza utilizando $((...)) o $[...]. Estas formas evalúan la expresión aritmética y sustituyen su resultado en el
lugar donde se utiliza.

Características:

➢ Se pueden utilizar expresiones aritméticas dentro de $((...)) o $[...].


➢ No es necesario dejar espacios en blanco entre los paréntesis o corchetes y la expresión contenida en
ellos.
➢ Las variables utilizadas en una expresión aritmética no necesitan ir precedidas del símbolo $.
➢ Se pueden anidar expresiones aritméticas dentro de otras expresiones aritméticas.

echo "Faltan $(( (365 - $(date +%j)) / 7 )) semanas hasta el fin de año"

Operadores aritméticos:

➢ +: Suma y resta, también puede ser utilizado como más unario (+) y menos unario (-).
➢ -: Suma y resta, también puede ser utilizado como más unario (+) y menos unario (-).
➢ *: Multiplicación.
➢ /: División (truncando decimales).
➢ %: Resto de la división.
➢ **: Potencia.
➢ ++: Incremento en una unidad. Puede ser prefijo (++variable) o sufijo (variable++).
➢ --: Decremento en una unidad. Puede ser prefijo (--variable) o sufijo (variable--).
➢ ( ): Agrupación para evaluar conjuntamente.
➢ ,: Separador entre expresiones con evaluación secuencial.
➢ =: Asignación. (no puede haber huecos en blanco a los lados)
➢ +=: Suma y asignación. (x+=y equivale a x=x+y igual ocurre con los sucesivos operadores)
➢ -=: Resta y asignación.
➢ *=: Multiplicación y asignación.
➢ /=: División y asignación.
➢ %=: Módulo y asignación

En el resultado del cálculo de expresiones aritméticas, bash solamente trabaja con números enteros, por lo
que si se necesitase calcular un resultado con decimales, habría que utilizar una forma alternativa, como
puede ser la ofrecida por la orden bc.
Operadores relacionales:

A = B, A == B, A -eq B: A es igual a B.
A != B, A -ne B: A es distinta de B.
A < B, A -lt B: A es menor que B.
A > B, A -gt B: A es mayor que B.
A <= B, A -le B: A es menor o igual que B.
A >= B, A -ge B: A es mayor o igual que B.
! A: A es falsa; representa al operador NOT (negación lógica).
A && B: A es verdadera y B es verdadera; es el operador AND (conjunción lógica).
A || B: A es verdadera o B es verdadera; es el operador OR (disyunción lógica).

Estos operadores relacionales permiten evaluar expresiones aritméticas y relacionarlas entre sí, devolviendo
un valor numérico que indica si la relación es verdadera (1) o falsa (0).

Ejemplos:

# Ejemplo de operadores relacionales


echo $((8 > 3)) && echo "8 es mayor que 3" || echo "8 no es mayor que 3"
# Ejemplo de operadores lógicos
echo $((8 > 3 && 9 < 5)) && echo "Ambas condiciones son verdaderas" || echo "Al
menos una condición es falsa"

A veces es necesario conocer características específicas de los archivos o directorios para saber cómo
tratarlos. Para aplicar los operadores de consulta de archivos haremos uso de dos órdenes nuevas, test e if.

Podemos asignar el resultado de los test a variables

$ xacceso=`test -x cat && echo “true” || echo “false”` # se pueden omitir las “”

Además es posible combinar expresiones para evaluar con los operadores !, -a y -o, not, and y or
ejemploAND=`test –O ejemplo –a –s ejemplo && echo true || echo false`

La orden `if` en bash es única porque cada condición no es una simple expresión booleana, sino una lista de
órdenes. El resultado se basa en el estado de finalización de estas órdenes: `0` para verdadero y `1` para
falso. Se evalúa la primera condición y, si es verdadera, se ejecutan las órdenes asociadas a `then`. Si es
falsa, se busca un bloque `elif`, evaluando cada uno en secuencia hasta encontrar uno verdadero. Si ningún
bloque `elif` es verdadero, se ejecutan las órdenes de un bloque `else` si existe. Una vez ejecutado un bloque,
la ejecución del `if` termina.
xacceso=`if test -x cat; then echo “true”; else echo “false”; fi

La condición de la orden if puede expresarse utilizando la orden test para hacer una comprobación. De forma
análoga se puede utilizar [ ... ]; si se usa “if [ expresión ];”, expresión puede ser una expresión booleana y
puede contener órdenes, siendo necesarios los huecos en blanco entre los corchetes y expresión

La comparación entre valores aritméticos se puede realizar de dos maneras en bash: tratando los valores
como cadenas de caracteres o como números. Para comparar la igualdad con el valor numérico, debemos
usar el operador =; para comparar caracteres debemos usar -eq o ==. También podemos realizar
comparaciones aritméticas utilizando el doble paréntesis.
if [ $valor == "34" ]; then echo sí; else echo no; fi # caracteres

if [ $valor = 34 ]; then echo sí; else echo no; fi #numérico

if (( $var1 == 234 )); then echo sí; else echo no; fi #aritmética

Cuando se usa doble paréntesis, no es posible utilizar –eq, -ne, -le, -lt, -ge y –gt. En su lugar se utilizarán los
operadores equivalentes mostrados en la tabla 4.3 (operadores relacionales <,>,!=...) . Además, la última
comparación obliga a usar el operador de igualdad ==. Si se emplea el = responderá con un mensaje de error.

Los operadores == y !=, también pueden utilizarse para comparar si dos cadenas de caracteres A y B
coinciden o no, respectivamente; además, los operadores < y > permiten comparar si una cadena de
caracteres A se clasifica antes o después de otra cadena B, respectivamente, siguiendo el orden lexicográfico.
Además, si se deja un espacio en blanco antes y después del operador =, también se realiza una comparación
en lugar de una asignación si se hace sin los pertinentes espacios en blanco.

if [ $valor = "hola" ]; then echo sí; else echo no; fi

Cuando la variable de caracteres que se desea comparar pueda contener algún espacio en blanco, es
obligatorio poner la variable entre comillas para realizar correctamente la comparación (cuando la variable
contiene un valor numérico o una palabra, no es necesario representarla entre comillas).

if [ “$valor” == "hola amigos" ]; then echo sí; else echo no; fi #valor entre
comillas y el texto también

En los ejemplos siguientes la condición del if es una orden:

valor=6
if [ valor=3 ]; then echo sí; else echo no; fi
sí # se hace internamente la orden que hay entre corchetes y no
echo $valor # da error, pero la supuesta asignación en la condición del
6 # if no tiene efecto sobre la variable que se estaba usando

if ls > salida; then echo sí; else echo no; fi


sí # además, el if hace la orden ls sobre el archivo salida
cat salida # vemos que la orden ls anterior ha volcado su resultado en
# este archivo, poniendo cada nombre en una línea distinta
# e incluyendo también el nombre “salida”

Las expresiones regulares son patrones utilizados para describir conjuntos de cadenas y se emplean en
búsquedas dentro de archivos o cadenas. Para aprovechar al máximo ciertas órdenes en bash, como find,
grep y egrep.

Dos expresiones regulares también pueden concatenarse; la expresión que se obtiene representa a cualquier
cadena formada por la concatenación de las dos subcadenas dadas por las subexpresiones concatenadas. Esto
no debe confundirse con el uso del operador OR

Ejemplo: Buscar en el directorio /bin/usr los archivos cuyo nombre comience con las letras a o z y acabe con
la letra m:

$ find /usr/bin -name "[az]*m"

Operadores para expresiones regulares:

➢ \: la barra de escape; si se quiere hacer referencia a este mismo carácter en un patrón, debe ir
precedido por él mismo y ambos entre comillas simples.

➢ .: cualquier carácter en la posición en la que se encuentre el punto cuando se usa en un patrón con
otras cosas; si se usa solo, representa a cualquier cadena; si se quiere buscar un punto como parte de
un patrón, debe utilizarse \. entre comillas simples o dobles.
➢ ( ): un grupo; los caracteres que se pongan entre los paréntesis serán considerados conjuntamente
como si fuesen un único carácter. (Hay que usar \)

➢ ?: indica que el carácter o grupo al que sigue puede aparecer una vez o no aparecer ninguna vez. (Hay
que usar \)

➢ *: indica que el carácter o grupo al que sigue puede no aparecer o aparecer varias veces seguidas. (No
hay que usar \)
➢ +: indica que el carácter o grupo previo debe aparecer una o más veces seguidas.
➢ {n}: indica que el carácter o grupo previo debe aparecer exactamente n veces. (Hay que usar \)

➢ {n,}: indica que el carácter o grupo previo debe aparecer n veces o más seguidas. (Hay que usar \)

➢ {n,m}: indica que el carácter o grupo previo debe aparecer de n a m veces seguidas; al menos n
veces, pero no más de m veces. (Hay que usar \)

➢ [ ]: una lista de caracteres que se tratan uno a uno como caracteres simples; si el primer carácter de la
lista es “^”, entonces representa a cualquier carácter que no esté en esa lista.
➢ -: un rango de caracteres cuando el guion no es el primero o el último en una lista; si el guion aparece
el primero o el último de la lista, entonces se trata como él mismo, no como rango; en los rangos de
caracteres, el orden es el alfabético, pero intercalando minúsculas y mayúsculas – es decir: aAbB...-;
en los rangos de dígitos el orden es 012... También es posible describir rangos parciales omitiendo el
inicio o el final del rango (por ejemplo [m-] representa el rango que va desde la “m” hasta la “z”).

➢ ^: indica el inicio de una línea; como se ha dicho anteriormente, cuando se usa al comienzo de una
lista entre corchetes, representa a los caracteres que no están en esa lista. Situando a continuación de
^ un carácter, filtrará todas aquellas líneas que comiencen por ese carácter.

➢ $: indica el final de una línea. Situando un carácter antes del $, filtrará todas aquellas líneas que
terminen por ese carácter.
➢ \b: el final de una palabra. (Debe utilizarse entre comillas simples o dobles)

➢ \B: que no está al final de una palabra. (Debe utilizarse entre comillas simples o dobles)

➢ \<: el comienzo de una palabra. (Debe utilizarse entre comillas simples o dobles)

➢ \>: el final de una palabra. (Debe utilizarse entre comillas simples o dobles)

➢ \ |: el operador OR para unir dos expresiones regulares, de forma que la expresión regular resultante
representa a cualquier cadena que coincida con al menos una de las dos subexpresiones. (La
expresión global debe ir entre comillas simples o dobles; además, cuando se usa con grep, esta orden
debe ir acompañada de la opción -E)

Ejemplo: Buscar en el directorio /etc los archivos de configuración que contengan la palabra “dev”:

$ find /etc -name “*dev*.conf”

La orden find se utiliza con la opción -regex para especificar que se buscan nombres de archivos que
satisfagan la expresión regular proporcionada después de esta opción. Si no se utiliza la opción -regex, los
símbolos se interpretarán como metacaracteres y no como parte de una expresión regular.

$ find /usr/bin -regex '.*\(cd\|zip\).*'

También podría gustarte