Actualmente estoy escribiendo mi tercer script de shell y me he encontrado con un problema. Este es mi guión hasta ahora:
#!/bin/bash
echo "choose one of the following options : \
1) display all current users \
2) list all files \
3) show calendar \
4) exit script"
while read
do
case in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac
done
cuando trato de ejecutar el script dice esto:
line2 : unexpected EOF while looking for matching '"'
line14 : syntax error: unexpected end of file.
¿Qué estoy haciendo mal?
shell
shell-script
Swifty124
fuente
fuente

Respuestas:
El problema es que a su
casedeclaración le falta el tema, la variable que debe evaluar. Por lo tanto, probablemente quieras algo como esto:Aquí
caseusa la variable predeterminada$REPLYque sereadllena cuando no se le da ningún nombre de variable (verhelp readpara más detalles).También tenga en cuenta los cambios:
printfse usa para mostrar el mensaje en cada ronda (y no agrega una nueva línea),catse usa para imprimir instrucciones en varias líneas para que no se envuelvan y sean más fáciles de leer.fuente
No olvidemos
select:fuente
Probemos por un solo caso inicialmente. Usaré
read -ppara leer la entrada del usuario en una variableoptseguida de una declaración de caso como se muestra a continuación.El script anterior funciona bien y ahora, creo que necesita tenerlo en un bucle para que pueda leer la entrada del usuario hasta que el usuario presione la opción 4.
Entonces, podríamos hacerlo con un
whilebucle como a continuación. Establezco la variableoptcon el valor inicial en 0. Ahora, estoy iterando en elwhilebucle siempre que laoptvariable tenga un valor de 0 (por lo que restablezco laoptvariable como 0 al final de lacasedeclaración).fuente
Yo personalmente pondría el "while" al comienzo del código. Si luego lo sigue con un
:, le permitirá recorrer tantas veces como lo desee. Así es como lo escribiría.luego continúe con las preguntas y termine con
fuente