Shell (parser ligne de commande)
Résolu/Fermé
ohmmega
Messages postés
16
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
27 novembre 2009
-
21 janv. 2008 à 19:14
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 29 janv. 2011 à 14:55
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 29 janv. 2011 à 14:55
A voir également:
- Shell parser
- Classic shell windows 11 - Télécharger - Personnalisation
- Shell do while ✓ - Forum Shell
- Shell startup windows 10 - Guide
- Efi shell version 2.31 - Forum Programmation
- Ssh secure shell download - Télécharger - Divers Web & Internet
8 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
21 janv. 2008 à 19:24
21 janv. 2008 à 19:24
Salut,
par exemple
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
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
21 janv. 2008 à 19:36
21 janv. 2008 à 19:36
-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.
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
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
21 janv. 2008 à 20:05
21 janv. 2008 à 20:05
Pour static tu utilise directement $1,$2,....
Pour faire une boucle sur le nombre d'arguments tu peux faire aussi
ensuite en fonction de ce que tu veux faire il faut adapter ;-)
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)) doneBref, 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 ;-)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
21 janv. 2008 à 20:29
21 janv. 2008 à 20:29
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) ) :
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;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
29 janv. 2011 à 14:55
29 janv. 2011 à 14:55
Salut,
;-))
$ cat tableau.sh #! /bin/bash i=0 for param in "${@}";do TABLEAU[$i]="${param}" ((i++)) done #affiche le nombre d'élément nbItem=${#TABLEAU[*]} echo "$nbItem" for ((i=0;i<$nbItem;i++)); do echo ${TABLEAU[${i}]} done $ ./tableau.sh un deux "3 et trois" quatre 4 un deux 3 et trois quatre $
;-))
ohmmega
Messages postés
16
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
27 novembre 2009
4
21 janv. 2008 à 19:27
21 janv. 2008 à 19:27
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?
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?
ohmmega
Messages postés
16
Date d'inscription
dimanche 6 janvier 2008
Statut
Membre
Dernière intervention
27 novembre 2009
4
21 janv. 2008 à 19:40
21 janv. 2008 à 19:40
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 :)
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 :)
sympaval
Messages postés
19
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
5 mai 2011
1
29 janv. 2011 à 06:17
29 janv. 2011 à 06:17
Salut!
J'ai utilise l'astuce des tableau indique ici pour recuperer ma ligne de commande et la parser, mais il se trouve qu'avec les tableau aucun chaine de caractere be doit contenir un espace.
Exemple, si l'argument de la ligne de commande est 'val 03' ou "val 03", le tableau va le placer dans deux elements, le premier etant "val" et le second "03", pourtant l'argment en question est bien "val 03" dans tous les cas. Et un echo de 'val 03' affiche bien val 03.
Merci de bien vouloir proposer un moyen de gerer ce cas de figure.
J'ai utilise l'astuce des tableau indique ici pour recuperer ma ligne de commande et la parser, mais il se trouve qu'avec les tableau aucun chaine de caractere be doit contenir un espace.
Exemple, si l'argument de la ligne de commande est 'val 03' ou "val 03", le tableau va le placer dans deux elements, le premier etant "val" et le second "03", pourtant l'argment en question est bien "val 03" dans tous les cas. Et un echo de 'val 03' affiche bien val 03.
Merci de bien vouloir proposer un moyen de gerer ce cas de figure.