NegroTruc a écrit :
@Sve@r : Je ne vois pas trop la différence entre nos deux if. Je ne fais pas de tests, je joue sur le code retour également non ?
|
Dans l'absolu oui. Car que tu écrives
ou
dans les deux cas tu demandes à "if" d'évaluer le code retour de la commande en question.
Toutefois, ton écriture
Code :
if test `echo $ligne | grep recherche` then ...
|
l'imbrication de backquottes demande au shell un travail supplémentaire, à savoir ouvrir un nouveau processus qui ira exécuter echo $ligne | grep recherche puis récupérer le texte affiché par cette commande et ensuite ramener ce texte dans l'instruction puis ensuite le processus se terminera et le test reprendra la main pour aller tester ce texte (sous-entendu "tester s'il existe ou pas" donc tester si grep a ramené quelque chose ou pas).
Donc oui ça marche... mais que de travail alors qu'un simple if grep eut suffit...
Je ne râle pas pour le if test qui est aussi efficace que if autre_chose, je râle parce que, par manque d'ouverture d'esprit en ne réalisant pas que l'instruction if peut évaluer toute commande quelle qu'elle soit, la majorité des programmeurs shells se cantonnent dans des "if test" et vont ensuite chercher des trucs abracadabrants pour que ça y rentre...
PS: "[]" est équivalent à "test" et tout ce que j'ai dit à propos du if est valable aussi pour le while et le until. D'ailleurs l'instruction de watael "while read ..." illustre bien cette notion (tant que read renvoie "vrai" donc tant que read a lu quelque chose)...
NegroTruc a écrit :
@watael : Ma machine prend le pipe/while, donc cela résout bien mon problème
|
watael ne parlait pas du pipe while (qui est un des fondamentaux d'Unix)... mais de la syntaxe [[ ... ]] qui est une syntaxe connue que des shells un peu évolués (à partir de bash)
Message édité par Sve@r le 03-12-2011 à 21:39:13