2009-08-30 6 views
1

[Modifier] J'ai résumé la réponse à ce qui suit ci-dessous, l'erreur se trouve dans la ligne:fournissant des arguments BASH

[Modifier] si [1 $ ne $ value]; puis


J'essaie de transmettre une valeur à une commande:

#!/bin/bash 
for value in $(mycommand $1) 
do 
    echo Found $value 
    if [$1 ne $value]; then 
     echo No match! 
    if 
done 

Mais si je tape dans ce qui suit pour exécuter le script:

#./myscript 25 

Je reçois la erreur:

Found somestuff 
./myscript: 25: command not found 

Ce que je voudrais faire, c'est passer le premier argument du script ("25" dans l'exemple ci-dessus) et l'envoyer à la commande "mycommand".

Comment est-ce que je peux faire ceci?

Répondre

1

Est-ce le complet myscript? J'ai essayé votre script écrit et reçu aucune erreur:

$ ./myscript.sh 25 
Found somestuff 
$ 

Si j'ajoute un $1 à la fin du script:

$ ./myscript.sh 25 
Found somestuff 
./myscript.sh: line 6: 25: command not found 
$ 

Mise à jour à votre édition: Lorsque vous utilisez la commande [, vous besoin d'ajouter un peu d'espace supplémentaire, et utiliser aussi -ne:

if [ $1 -ne $value ]; then 

La commande [ est souvent mis en œuvre comme molle ou dure un lien vers la commande test, par exemple:

$ ls -l `which [` 
lrwxr-xr-x 1 root  root   4 May 16 2006 /usr/bin/[ -> test 

La page de manuel pour test donnera plus d'informations sur les expressions valides.

+0

Vous avez corrigé mon script tel que posté était incomplet. – Jamie

+0

Merci d'avoir suggéré "ls -l' qui ['" - indiquait une implémentation busybox. Y a-t-il une autre construction que je peux utiliser pour l'instruction 'if' que je pourrais utiliser comme alternative? – Jamie

+0

Merci pour votre aide. Je posterai ma réponse ... – Jamie

0

Je ne trouve aucun problème avec ce script.

$ more x 
#!/bin/bash 
for value in $(echo $1) 
do 
    echo Found $value 
done 
$ sh x 28 
Found 28 
$ 

Que fait exactement mycommand?

0

Greg m'a orienté dans la bonne direction, à savoir:

  • ajouter des espaces autour du [] dans l'instruction if, je ne savais pas qu'ils étaient des commandes
  • le test du programme ne prend pas ' ne 'comme argument.

Mon script corrigé est:

!/bin/bash 
for value in $(mycommand $1) 
do 
    echo Found $value 
    if [ $1 != $value ]; then 
     echo No match! 
    if 
done 

Un grand merci.

+0

Mettez un trait d'union avant le "ne" pour avoir "-ne". Voir aussi la page Bash 'man' et http://mywiki.wooledge.org/BashFAQ/031 pour les raisons pour lesquelles' [['vaut mieux que' [', surtout en ce qui concerne le besoin réduit de citer des arguments. –

Questions connexes