2009-08-25 7 views
1

J'ai une séquence de commande unix qui va quelque chose comme:exécuter une commande shell unix si la sortie ne dispose pas d'un certain nombre de lignes

command1 | command2 | command3 | wc -l 

Maintenant que j'ai le nombre de lignes, je J'aimerais faire quelque chose (exécuter une commande spécifique sans entrées) si le nombre de lignes n'est pas égal à un nombre spécifique. Mon script shell est incroyablement rouillé (peut-être 10 ans ou plus depuis que j'ai fait beaucoup de travail Unix) donc je ne sais pas comment ajouter ce genre de conditionnel à une séquence de commandes. Est-ce que quelqu'un sait?

Répondre

2

Kinda laid .. mais cela fonctionne.

# test $(seq 10 | wc -l) -eq 10 && echo "there's 10" 
there's 10 
# test $(seq 11 | wc -l) -eq 10 && echo "there's 10" 

ed rien echo dans le second cas

+0

qui me rappelle mes jours de collège, alors que notre instructeur de programmation unix nous a conseillé de ne pas nommer nos programmes compilés « test ». – quillbreaker

+0

semble avoir besoin de backticks au lieu de la syntaxe $() pour csh, mais sinon cela fonctionne très bien. Merci. – quillbreaker

+1

Vous les avez nommés? .. J'étais heureux avec 'a.out': p – eduffy

3
numberOfLines=$(command1 | command2 | command3 | wc -l) 
if [ "${numberOfLines}" == "7" ]; then 
    echo "Hooray." 
fi 
5

Vous devez capturer la sortie de votre commande wc et utiliser if pour exécuter une autre commande si ce n'est pas égal au nombre de lignes que vous voulez, tels que:

count=$(command1 | command2 | command3 | wc -l) 
if [[ $count -ne 19 ]] ; then 
    command4 
fi 
+0

+1 pour la comparaison numérique –

Questions connexes