Bonjour,
J'aimerais savoir ce que veut dir le code suivant :
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 % /mnt/CF16/bin % for i in `cat /tmp/liste` do/bin/ln -s busybox $i; done`
Bonjour,
J'aimerais savoir ce que veut dir le code suivant :
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 % /mnt/CF16/bin % for i in `cat /tmp/liste` do/bin/ln -s busybox $i; done`
Bonjour,
Ligne 1: Bah, rien
Ligne 2: execute la commande bin qui se trouve dans /mnt/CF16 (connait pas cette commande, désolé)
Ligne 3,4,5: doit attendre une saisie clavier pour fermer le back-quote...![]()
Bonjour
+1 disedorgue.
- ``est équivalent à $( )Il devrait remplacer l'expression par son résultat.
- ln -s sert à faire des liens symboliques (comme des raccourcis sous windows)
- Il y a un nombre impair de `
- Mettre un ";" en fin de ligne est inutile puisque cela exprime la fin de ligne dans une commande shell
Bonjour
La syntaxe `commande Unix` (qui est pure Bourne Shell) est remplacée par ce que la commande affiche. Ce remplacement s'inscrit alors dans l'expression dans laquelle elle s'effectue.
Exemple
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cd /tmp rep=`pwd` # Equivalent à rep=/tmp puisque la commande "pwd" affiche "/tmp"
Cette syntaxe a été remplacée dans les shells évolués par $(commande Unix). D'une part elle est plus parlante, d'autre part elle permet plus facilement l'imbrication de commandes
Exemple
Exemple qui serait plus difficile et moins lisible à écrire avec les backquotes classiques
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 fact() { test $1 -eq 0 && echo 1 || expr $1 \* $(fact $(expr $1 - 1)) }
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 fact() { test $1 -eq 0 && echo 1 || expr $1 \* `fact \`expr $1 - 1\`` }
Donc ton for in `cat /tmp/liste` va commencer par faire un cat /tmp/liste. Cette commande va afficher le contenu du fichier /tmp/liste (par exemple "toto titi tata") donc cet affichage sera repris ici et intégré dans l'expression ce qui donnera au final for i in toto titi tata.
Accessoirement cette syntaxe est assez maladroite parce que si le contenu du fichier contient un élément avec espace, cet élément sera alors découpé en deux éléments par le for qui bien évidemment n'en traitera alors aucun (puisqu'aucune des deux parties ne correspondra à l'élément entier).
On lui préfère largement la syntaxe suivante
Le read se calant sur le <return> pour travailler, il ne sera pas gêné par un espace...
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 cat /tmp/liste | while read i do ... done
PS: la backquote finale (après le done) ne veut rien dire et est probablement une erreur de recopie. Mettre une commande entre backquotes ne se justifie que:
- si la commande affiche quelque chose
- si ce qu'elle affiche doit être réutilisé dans le script
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Partager