Solicitud / entrada de usuario de script de shell
Pregunta
Este es un script de shell korn crudo que alguien más escribió. No sé mucho sobre el uso de la sintaxis de shell y ni siquiera estoy seguro de si esto es posible.
¿Hay alguna forma de que ejecute este archivo y se me solicite la fecha para no tener que ingresar manualmente al script y cambiarlo cada vez?
Por ejemplo, quiero reemplazar el "12/12/09" con una variable que se toma de una solicitud de usuario.
#!/bin/ksh
./clear_old
./rooms_xls.pl 1/12/09
cd doors
./doors_xls.pl 1/12/09
Solución
Si desea que se le solicite (en lugar de pasar la fecha como parámetro), use la siguiente lógica (o algo similar):
date=
while [ -z $date ]
do
echo -n 'Date? '
read date
done
Ese ciclo continuará solicitando la fecha hasta que el usuario ingrese algo (cualquier cosa) que no sea un RETORNO simple.
Si desea agregar una validación simple y está utilizando una versión de KSH que es KSH93 o mejor, haga algo como esto:
date=
while [ -z $date ]
do
echo -n 'Date? '
read date
if [[ $date =~ ^[0-9]{1,2}/[0-9]{1,2}/[0-9]{1,4}$ ]]
then
break
fi
date=
done
Consulte la página del manual de ksh93 para más información.
Otros consejos
En general, desde una línea de comandos de script de shell se puede acceder a argumentos como:
./room_xls.pl $1
, $1, ... $N
Para que pueda reemplazar la fecha codificada como:
./myscript 1/12/09
Y ejecútalo como
<*>$ 1 es el primer argumento de línea de comando. Esto sube a $ 9. Consulte este tutorial para obtener una sintaxis ksh más básica.