bonjour à tous voilà je viens de découvrir linux pour faire des test avec un shell ou script que j'ai dans mon cours mais rien ne se passe voici ce que j'écris:
<<for i in toto ; do if echo a ; then echo b ; else echo a ; fi ; done >>
et rien ne se passe pourquoi
ensuite j'essais avec ça :
<<a=1 ; b=$a ; a=2 ; export a ; echo $ab >>
si vous pouviez éclairer mes lanternes car je ne connais pas grand chose en programmation et je n'ai pas de manuelle non plus merci à vous tous
<<for i in toto ; do if echo a ; then echo b ; else echo a ; fi ; done >>
et rien ne se passe pourquoi
Premièrement, il faut comprendre comment marche la boucle for. "for i in toto" fait que i prend tour à tour toutes les valeurs présentes dans la liste toto. Ici "toto" est vide, donc la boucle ne fait rien.
Ensuite, je ne comprends pas "if echo a". "Echo" écrit "a" sur le terminal, ensuite il renvoie une valeur dépendant du fait qu'il y ait eu des erreurs ou non. Le "if" teste donc s'il y a eu des erreurs dans la commande "echo a". Je ne pense pas que c'est ce qui était souhaité.
<<a=1 ; b=$a ; a=2 ; export a ; echo $ab >>
"$ab" est la valeur de la variable nommée "ab"... qui est vide. Pour avoir les valeurs de a et de b, il faudrait "$a$b". À quoi sert l'export ?
Pour trouver un manuel, le mieux est de chercher "bash tutoriel".
Encore une victoire de Canard !
20/03/2009 - 10h04
polo974
Date d'inscription
février 2007
Messages
5 280
Re : shell ou script linux
ah, ce toto...
le shell (perso c'est le bash, un sh évolué fourni avec linux) a une syntaxe assez euh comment dire lourd(ingu)e... mais on y arrive.
for a 2 formes: for i in list.... un peu comme en python et for ((...;...;...)) un peu comme en C
Code:
for (( i=0 ; $i<10 ; i=$i+1)) ; do echo $i ; done
compte de 0 à 9 inclus
les tests (ici test si le paramètres 2 existe puis bornage de la valeur (écriture assez "à la C"))
Code:
#size 3 par defaut
if [[ -z $2 ]]
then
size=3
else
size=$(($2+0))
size=$(($size<0?0:$size))
size=$(($size>3?3:$size))
echo "Taille bidule:$size"
fi
et ici un test de grandeur (un peu à la fortran pour cause de < et > déjà utilisé...)
Code:
if [[ $w -gt $wmax ]]
then
echo "Image trop large"
exit
fi
Pour revenir au for i in ...
c'est très puissant pour jouer sur des fichiers par exemple:
pour tous les fichiers présent à partir du répertoire courant, changer l'utilisateur:
Code:
for i in $(find .)
do
echo "$i"
chown 1001:1001 "$i"
done
on peut ensuite jouer sur le find pour avoir une action sélective (par exemple supprimer les fichiers finissant par ~)
bref faire un man bash >bash.txt et apprendre par coeur
20/03/2009 - 11h42
Towl
Date d'inscription
janvier 2008
Messages
1 327
Re : shell ou script linux
Le dernier for est un peu bourrin sachant que find sait le faire tout seul
Code:
find . -exec 'chown 1001:1001 {} ;'
Mais c'est vrai que la on sort un peu du cadre de l'apprentissage des boucles bash Mais ca reste plus rapide que le for
The only limiting factor of the Linux operating system, is his user. - Linus Torvalds
20/03/2009 - 12h28
Philou67
Date d'inscription
janvier 2006
Localisation
Krùmm Elsàss
Âge
46
Messages
16 040
Re : shell ou script linux
Envoyé par stegosor
<<for i in toto ; do if echo a ; then echo b ; else echo a ; fi ; done >>
et rien ne se passe pourquoi
En bash, cette ligne est valide et renvoie :
a
b
Le "a" provient du echo a du if.
Le "b" provient du echo b du then qui s'exécute car le retour de la commande "echo a" est vrai.
En revanche, il y a fort à parier que l'objet du test aurait du utiliser $i.
Pourrais-tu préciser quel shell script tu utilises ?
Envoyé par Coincoin
Salut,
"for i in toto" fait que i prend tour à tour toutes les valeurs présentes dans la liste toto. Ici "toto" est vide, donc la boucle ne fait rien.
La liste n'est pas vide : elle contient "toto"... et oui, encore lui !
Plus j’apprends, et plus je mesure mon ignorance
20/03/2009 - 18h06
stegosor
Date d'inscription
février 2007
Âge
39
Messages
13
Re : shell ou script linux
bonjour et merci de vos réponses donc en voyant tout ça puis je conclure que j'aurais fait apparaitre a sur une ligne et b sur une autre ou alors je l'ecrit mal car et avec donc la ligne que vous avez tous vue
<<for i in toto ; do if echo a ; then echo b ; else echo a ; fi ; done >>
après vos explication il est donc normale que rien ne se passe ?
et pour la deuxième <<a=1 ; b=$a ; a=2 ; export a ; echo $ab >>
apres les explications de coincoin je comprend pourquoi je n'ai rien
car c'est mal ecrit pour obtenir un résultat merci a vous tous et j'aimerais juste une précision sur <<for i in toto ; do if echo a ; then echo b ; else echo a ; fi ; done >> après vos explication il est donc normale que rien ne se passe ?
merci de me répondre après je vous embêterais plus et encore un grand merci cela ma bien aider a bientôt
Ton dernier message est quelque peu "confus".
Pourrais-tu préciser :
- le shell que tu utilises : sh, csh, ksh, zsh, bash, ... ?
- quel est l'objectif de la fonction que tu veux écrire ? (en effet, pour écrire simplement a et b, il y a plus simple que la boucle : echo a;echo b).
Plus j’apprends, et plus je mesure mon ignorance
25/03/2009 - 08h44
stegosor
Date d'inscription
février 2007
Âge
39
Messages
13
Re : shell ou script linux
encore merci a vous de toutes vos réponse cela ma bien aider et j'y suis arriver a bientôt merci
26/03/2009 - 08h44
Papy Octet
Date d'inscription
juillet 2005
Localisation
Liège -Belgique
Âge
62
Messages
414
Re : shell ou script linux
Envoyé par stegosor
encore merci a vous de toutes vos réponse cela ma bien aider et j'y suis arriver a bientôt merci
Pour tous les autres utilisateurs de ce forum : comment as-tu fait ?
Quelle est ta solution, le résultat ?
Quand on a trouvé une solution à son problème, et pour remercier ceux qui t'ont aidé, il est normal de renvoyer la solution.