Comando let
let sustituye (( ))
ejemplo:
let “x = x * 10” es lo mismo que ((
x = x * 10 ))
Sustitución de expresiones aritmeticas
$((x=x+1)
Correpcion de script: la depuración
Exite como modalidad de “seguimiento”
de lo que estamos ejecutando:
set -x (activar la opcion)
set +x (desactiva la opcion)
set -n (procesa la linea pero no la
ejecuta, (procesar: sustituye la variables, patrones, caracteres
comodin, pero no la ejecuta)).
Ventaja que tiene es ver como se esta
sustituyendo las cosas, pero si falla el script se para, de esta
manera al o ejectarse, no altera lo que haria el escrit (mover el
archivo, borrarlo), y podemos ver hasta final.
Case:
En C
|
En script
|
Switch |
Case $variable in |
Case 1: |
patron1) |
Break; |
;; |
Default |
*) |
|
;; |
} |
esac |
Ejercicio:
Hacer script existe_usuario recibe como
argumento un nombre de usuario. El script muestra por pantalla si el
usario existe o no en el sistema.
#!/bin/bash
#para
hacer depuracion
set
-x
#comprobamos
el nº de argumentos ($#) que han puesto (si es distinto a 1 salir
diciendo que es error)
if
[[
$# != 1
]];
then
echo
"Cantidad
de argumentos no valida"
exit
1
fi
#1
opcion:
#grep
devuelve
0 si ha encontrado algo, y muestra las lineas que ha encontrado. Las
lineas que ha encontrado las podemos enviar a >/dev/null para que
no las muestre
.
#si
falla devolvera no 0
#if
grep $1 /etc/passwd > /dev/null ; then
#
#echo
"existe suario"
#else
#echo
"no existe usuario"
#fi
#otra
forma seria (2º variante)
variable=$(cat
/etc/passwd
|cut
-d
: -f1
|grep
$1)
#en
variable tengo la salida
de pantalla
del comando
if
[[
$variable
= ""
]]
then
echo
"no
existe usuario"
else
echo
"si
es un usuario"
fi
Ejercicio:
Pedir dos numeros por teclado y mostrar
cual es mayor
#!/bin/bash
echo
"Comparar
dos numeros"
echo
"pon
un numero:"
read
numero1
echo
"pon
el 2º numero:"
read
numero2
#
test y su mejora [[ ]], el simbolo > maneja datos de tipo texto,
con lo cual lo ordena alfabeticamente. (y da problemas con los
numeros negativos.
#
, teniamos que usar -gt para manejar numeros
#
La solucion mas simple, usar mejor (( )) que resuelve expresiones
if
((
$numero1
>
$numero2
))
then
echo
"el
$numero1 es mayor que el $numero2"
elif
((
$numero1
<
$numero2
))
echo
"el
$numero1 es menor que el $numero2"
else
echo
“Son iguales”
fi
exit
0
Ejercicio:
Vamos
a mostrar la cantidad de archivos con extensión .c, en el directorio
que se indique.
#!/bin/bash
echo
"Vamos
a mostrar la cantidad de archivos con extensión .c, en el directorio
que se indique."
echo
"Pon
el directorio:"
read
directorio
ls
-1
$directorio*.c
>listado.txt
salida=$(wc
-l
listado.txt )
echo
"Numero
de archivos:"
echo
$salida
|
cut
-d
"
"
-f
1
No hay comentarios:
Publicar un comentario