J'écris actuellement mon troisième script shell et j'ai rencontré un problème. Voici mon script jusqu'à présent:
#!/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
lorsque j'essaie d'exécuter le script, il dit ceci:
line2 : unexpected EOF while looking for matching '"'
line14 : syntax error: unexpected end of file.
Qu'est-ce que je fais mal?
shell
shell-script
Swifty124
la source
la source
Réponses:
Le problème est que votre
case
sujet manque le sujet - la variable qu'il doit évaluer. Par conséquent, vous voulez probablement quelque chose comme ça:Ici
case
utilise la variable par défaut$REPLY
qui seread
remplit quand on ne lui donne aucun nom de variable (voirhelp read
pour plus de détails).Notez également les modifications:
printf
est utilisé pour afficher l'invite à chaque tour (et n'ajoute pas de nouvelle ligne),cat
est utilisé pour imprimer les instructions sur plusieurs lignes afin qu'elles ne soient pas enroulées et soient plus faciles à lire.la source
N'oublions pas
select
:la source
Essayons d'abord un seul cas. Je vais utiliser
read -p
pour lire l'entrée utilisateur dans une variableopt
suivie d'une déclaration de cas comme ci-dessous.Le script ci-dessus fonctionne bien et maintenant, je pense que vous devez l'avoir en boucle afin que vous puissiez lire les entrées de l'utilisateur jusqu'à ce que l'utilisateur appuie sur l'option 4.
Donc, nous pourrions le faire avec une
while
boucle comme ci-dessous. J'ai défini la variableopt
avec la valeur initiale à 0. Maintenant, j'itère dans lawhile
boucle tant que laopt
variable a une valeur à 0 (c'est pourquoi je réinitialise laopt
variable à 0 à la fin de l'case
instruction).la source
Je mettrais personnellement le "while" au début du code. Si vous le suivez ensuite avec un
:
, il lui permettra de boucler autant de fois que vous le souhaitez. C'est ainsi que je l'écrirais.continuez ensuite les questions et terminez par
la source