Dans ce cas particulier, notez que bash a une variable appelée PWD
qui contient le répertoire courant: $PWD
est équivalent à `pwd`
. (Même les autres coquilles, c'est un standard feature.) Vous pouvez donc écrire votre script comme ceci:
#!/bin/bash
until [ "$PWD" = "/" ]; do
echo "$PWD"
ls && cd .. && ls
done
Notez l'utilisation des guillemets doubles autour des références variables. Ils sont nécessaires si la variable (ici le répertoire courant) contient des espaces ou des caractères génériques (\[?*
), car le shell divise le résultat des extensions variables en mots et effectue une globalisation sur ces mots. Toujours ajouter deux fois les expansions variables "$foo"
et les substitutions de commande "$(foo)"
(à moins que vous ne le sachiez spécifiquement).
Dans le cas général, que d'autres réponses ont déjà mentionné:
- Vous ne pouvez pas utiliser des espaces autour du signe égal dans une mission:
var=value
, non
var = value
- Le
$
signifie « prendre la valeur de cette variable ", donc vous ne l'utilisez pas lors de l'affectation: var=value
, et non
$var=value
.
Vous pouvez également ajouter une trappe d'évacuation à vos boucles en cas de problème. par exemple. 'i = 0' oustide de la boucle. puis à l'intérieur, 'i = $ i + 1'. Et puis aussi à l'intérieur de la boucle, ajoutez quelque chose comme 'if [$ i> 25] alors; Pause; endif; 'Je ne suis pas sûr de la syntaxe de la boucle dans les scripts shell, mais ça devrait être quelque chose comme ça. –