En plus des erreurs de syntaxe @PSkocik ont souligné, lorsque vous avez un certain nombre de conditions if
mutuellement exclusives, il est généralement plus clair/mieux utiliser if ... elif...
au lieu d'un groupe si if
blocs séparés:
if [ "$command" = "my-tweets" ]; then
node liri.js "$command"
elif [ "$command" = "do-what-it-says" ];then
node liri.js "$command"
elif [ "$command" = "spotify-this-song" ]; then
...etc
mais quand vous comparez une seule chaîne ("$command"
) contre un groupe possible cordes/modèles, case
est une façon encore plus claire pour le faire:
case "$command" in
"my-tweets")
node liri.js "$command" ;;
"do-what-it-says")
node liri.js "$command" ;;
"spotify-this-song")
...etc
esac
En outre, lorsque plusieurs cas différents exécutent tous le même code, vous pouvez inclure plusieurs correspondances dans un seul cas. En outre, il est une bonne idée d'inclure un modèle par défaut pour faire face à des chaînes qui ne correspondent pas autre chose:
case "$command" in
"my-tweets" | "do-what-it-says")
node liri.js "$command" ;;
"spotify-this-song" | "movie-this")
echo What item would like to query?
read item
node liri.js "$command" "$item" ;;
*)
echo "Unknown command: $command" ;;
esac
Et comme pour la boucle: généralement, vous auriez soit utiliser quelque chose comme while read command; do
(notez l'absence de [ ]
, parce que nous utilisons la commande read
, pas la commande test
aka [
); ou utilisez simplement while true; do read ...
puis vérifiez la condition de fin et break
à partir de l'intérieur de la boucle. Ici, il est probablement préférable de faire le dernier:
while true; do
echo "What command would like to run?"
read command
case "$command" in
"my-tweets" | "do-what-it-says")
node liri.js "$command" ;;
"spotify-this-song" | "movie-this")
echo What item would like to query?
read item
node liri.js "$command" "$item" ;;
"end")
break ;;
*)
echo "Unknown command: $command" ;;
esac
done
Indentez votre code. – Cyrus
Regardez s'il vous plaît: http://www.shellcheck.net/ – Cyrus