Rechercher : dans
Par :

Shell (parser ligne de commande)

Dernière réponse le 21 jan 2008 à 20:29:22 ohmmega, le 21 jan 2008 à 19:14:39 
 Signaler ce message aux modérateurs

Bonjour, tout le monde
Je viens de decouvrir le langage shell sh et je n'arrive pas a me renseigner sur le moyen de parser la ligne de commande. Par exemple

./fichier_shell.sh bonjour tout le monde

donc le fichier_shell aura:
$1=bonjour
$2=tout
$3=le
$4=monde

contrairement au php par exemple on pouvait faire
for($i = 0; $i < $argc; $i++){
echo $argv[$i];
}

Mais je suis incapable de faire une boucle sur les arguements $1,$2... pour voir ce que chacune variable a comme valeur

Merci beaucoup de votre aide

Configuration: FreeBSD
Firefox 2.0.0.6

Meilleures réponses pour « Shell (parser ligne de commande) » dans :
[Windows XP] Activer/Désactiver le pare-feu en ligne de commande VoirIl est possible d'activer ou désactiver le pare-feu (firewall) de Windows XP SP2 grâce à une simple ligne de commande : Pour désactiver le pare-feu de Windows XP :netsh firewall set opmode disable Pour activer le pare-feu de Windows XP :netsh...
Gérer le registre en ligne de commande VoirCette astuce vous permet de gérer la base de registre en ligne de commande avec la commande REG. Ceci pourrait être utile en cas d'infection qui empêche l'accès au registre ou bien lorsqu'on veut créer un batch qui modifie le registre. Remarques...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Systèmes UNIX - Le shell VoirIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire entre le système...
Linux - Le shell VoirIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire le système...
Utilisation de la commande ftp VoirLe protocole FTP FTP (File Transfer Protocol) est un protocole, c'est-à-dire un langage standard de communication entre deux machines, permettant à des machines de types différents (ou dont le système d'exploitation est différent) de transférer des...

1

lami20j, le 21 jan 2008 à 19:24:43
  • +1

Salut,

par exemple

lami20j@debserv:~/trash$ cat ccm.sh
#!/bin/bash

while [ -n "$1" ] ; do
    echo $1
    shift
done
lami20j@debserv:~/trash$ sh ccm.sh bonjour tout le monde
bonjour
tout
le
monde
lami20j@debserv:~/trash$

lami20j

Répondre à lami20j

2

ohmmega, le 21 jan 2008 à 19:27:28

Oula rapide la reponse ^^ merci

Mais tu pourrai mexpliquer un peu sur la fonction du "-n" dans la boucle While et le mot shift dans l'instruction de ce dernier?
Et par ailleurs si on boucle sur $1 comment ferais je si je veux un $1 $2 ou $3... statique dans la boucle?

Répondre à ohmmega

3

lami20j, le 21 jan 2008 à 19:36:23
  • +1

-n c'est un test sur une chaine = la longueur de la chaine est non nulle
Donc la boucle s'exécute tant qu'il y a une chaine de longueur non nulle

pour shift regarde man bash

shift [n]
Les paramètres positionnels à partir de n+1 ... sont renommés en $1 .... Les paramètres représentés par les nombres $#
jusqu'à $#-n+1 sont détruits. n doit être un entier positif inférieur ou égal à $#. Si n vaut 0, aucun paramètres n'est mod-
ifié. Si n est omis, on suppose qu'il vaut 1. Si n est supérieur à $#, les paramètres positionnels ne sont pas modifiés.
L'état renvoyé est strictement plus grand que zéro si n est plus grand que $# ou plus petit que zéro ; sinon 0.


lami20j

Répondre à lami20j

4

ohmmega, le 21 jan 2008 à 19:40:01

Ok je vois plus clair

J'ai redite mon message pendant que tu me repondait :

Si on boucle sur $1 comment ferais je si je veux un $1 $2 ou $3... statique dans la boucle?

Encore merci rapides :)

Répondre à ohmmega

5

lami20j, le 21 jan 2008 à 20:05:25
  • +1

Pour static tu utilise directement $1,$2,....

Pour faire une boucle sur le nombre d'arguments tu peux faire aussi

#!/bin/bash

i=1
while [ $i -le $# ];do
    eval "echo \$$i"
    i=$((i+1))
done
Bref, si tu veux apprendre le fonctionnement, sache qu'il y a toujours plusieurs façon de le faire
ensuite en fonction de ce que tu veux faire il faut adapter ;-)

lami20j

Répondre à lami20j

6

 jipicy, le 21 jan 2008 à 20:29:22
  • +1

Salut,

Juste pour dire que si il y a plus de 9 paramètres, les suivants doivent être appelés comme suit : s{10}, s{11},..., ${15], etc...

Voir dans la FAQ : Les paramètres

Sinon, tu peux aussi utiliser les "tableaux" (attention la numérotation dans ce cas commence à "0" (zéro) ) :

$ cat bar.sh
#! /bin/bash

TABLEAU=( $(echo $*) )
i=0
while [ "$i" -lt "${#TABLEAU[@]}" ]
do echo ${TABLEAU[$i]}
i=$((i+1))
done

$ ./bar.sh premier second troisième quatrième
premier
second
troisième
quatrième
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy