J'ai fait sur la ligne de commande et c'est bien. Mais quand je fais la même chose dans un script shell. Il imprime une erreur qui "laisse: non trouvé".
Voici le fichier de script. P> merci, p> p>
8 Réponses :
C'est le '$ a' de '$ a = 1234' qui vous tue.
La coque fait toutes les substitutions $, puis évalue l'expression. En conséquence, il a vu "= 1234" car il n'y avait pas de valeur à $ a. P>
Utiliser -x pour voir cela. P>
bash -x your-script
Le problème est probablement que Donc, vous devrez peut-être changer votre ligne de shebang vers Utilisez une enveloppe différente: p> ou p> Vous n'avez pas besoin des semi-couches aux extrémités de la lignes. p> p> / bin / sh code> n'est pas identique à celui ou ne se comporte pas de la même manière que votre coquille normale. Par exemple, lorsque
Bash code> est appelé comme
/ bin / sh code>, il fournit un sous-ensemble de ses fonctions normales.
Vérifiez votre shell réel avec la commande suivante dans la ligne de commande:
de Il fournira un nom de shell, utilisez-le au lieu de / bin / sh à la première ligne de votre script. P>
de
echo $ shell em> p>
Oui, le problème était avec le shebang. Je l'ai changé à #! / Bin / Bash (Echo $ Shell Print Bash) et ça marche. Mais quel est le but de Shebang alors? Je pensais que cela invoque la coquille appropriée pour exécuter le script. (J'ai SH in / bin). Ou est-ce que laisse n'est pas pris en charge dans la coquille de Bourne?
Vous devez utiliser let a = A + 1 code> sans guillemets p>
Ne pas utiliser laisser code>. Utilisez expansion arithmétique POSIX :
a = $ (( $ A + 1)) code>. Ceci est garanti de travailler dans n'importe quel shell compatible POSIX. P>
C'est la meilleure solution
c=1 d=1 for i in `ls` do if [ -f $i ] then echo "$c -> $i" c=`expr $c + 1` fi done c=`expr $c - 1` echo no. of files $c for i in `ls` do if [ -d $i ] then echo "$d -> $i" d=`expr $d + 1` fi done d=`expr $d - 1` echo no. of direcrories $d
Bienvenue dans le débordement de la pile! Bien que ce code puisse aider à résoudre le problème, il n'explique pas pourquoi i> et / ou comment i> répond à la question. Fournir ce contexte supplémentaire améliorerait de manière significative sa valeur éducative à long terme. S'il vous plaît Modifier Votre réponse à ajouter une explication, y compris quelles limitations et hypothèses s'appliquent.
Vérifiez le nom du shell en utilisant p>
Modifiez la première ligne du script en conséquence vers p>
ou p>
au lieu de echo $ shell code> p> li>
#! / bin / bash code> p>
#! / bin / ksh code> p>
#! / bin / sh code>. p> li>
ol>
Vous utilisez probablement une coquille différente - avez-vous une ligne de shebang au début de votre script?
Peut-être utiliser
a = 1234 code>? Vérifiez ceci:
Aide | Grep Laissez code> aussi.
Echo $ shell code> - Qu'est-ce que ça dit?
Cette première ligne n'est pas valide. Êtes-vous sûr que vous écrivez un script shell?
Oui je mets un shebang. #! / bin / sh
Si vous utilisez vraiment UNIX et non Linux, alors vous utilisez
# ~ / bin / sh code> vous obtient la coquille de Bourne. De votre ligne de commande (quand cela fonctionne avec
laisse code>), tapez
echo $ shell code> et utilisez-le pour votre
#! / Bin /... code> . Bonne chance.
Pouvez-vous croire ce gars ???? Github.com/drbeco/killgradygrady/issues/1
Je ne suis pas responsable de ce problème GitHub ;-). Ce n'est pas moi. @Drbeco lol
Bonjour @john, je suis content que ce n'était pas toi, merci de clarifier cela. ;) La question est toujours la question: pouvez-vous croire que gars!? Lol passe une bonne journée. (J'ai mis à jour le sujet dans la question pour ne pas impliquer que c'était vous ou donner cette impression)