run a unix shell command if the output doesn't

2019-07-26 16:52发布

问题:

I've got a unix command sequence that goes something like:

command1 | command2 | command3 | wc -l

Now that I have the number of lines, I'd like to do something (run a specific command with no inputs) if the number of lines isn't equal to a specific number. My shell scripting is fantastically rusty (perhaps 10 years or more since I've done much Unix work) so I don't know how to add this kind of conditional to a command sequence. Does anyone know?

回答1:

Kinda ugly .. but this works.

#  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"

nothing's echoed in the second case



回答2:

You need to capture the output of your wc command and use if to run another command if it's not equal to the number of lines you want, such as:

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


回答3:

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


标签: shell