Bash命令(if语句)终端

时间:2015-12-13 21:21:08

标签: macos bash if-statement terminal

我有以下问题:

if [ (airport en1 -s|awk 'END{print NR—}’) -lt 11]; then
    open  ~/Desktop/1-10.mp3
else if -ge 10 -lt 15
    then ~/Desktop/11-14.mp3
else if -ge 14 -lt 18
    then ~/Desktop/15-17.mp3
else if -ge 17 -lt 21
    then ~/Desktop/18-20.mp3
else if -ge 20 -lt 24
    then ~/Desktop/21-23.mp3
else if -ge 23 -lt 27
    then ~/Desktop/24-26.mp3
else if -ge 26 -lt 30
    then ~/Desktop/24-27.mp3
else if -ge 29 -lt 36
    then ~/Desktop/30-36.mp3
else if -ge 35 -lt 41
    then ~/Desktop/36-40.mp3
fi

基本上我希望它扫描有多少个wif Airport en1 -s) 然后我让它计算在没有第一行|awk 'END{print NR—}’的情况下 然后我有一系列if命令,我都需要获得更敏感的结果。但它现在不能正常工作。

有人可以帮帮我吗? (是的,我已经阅读过bash教程......)

2 个答案:

答案 0 :(得分:2)

即使在这么多代码中也存在很多问题(其余的只是重复这里显示的问题):

i=1
echo $i
: $((i=i+1))
echo $i
  • if [ (airport en1 -s|awk 'END{print NR—}’) -lt 11]; then open ~/Desktop/1-10.mp3 else if -ge 10 -lt 15 then ~/Desktop/11-14.mp3 ]命令的单独参数;外壳中的间距至关重要。

  • [应为单引号(撇号)Eric Renoufcomment注明)。

  • '拼写为else if。如上所述,每个elif您需要额外fi

  • 系统可能无法提供您尝试运行的命令else if

  • 第二个及后续命令不以-ge为前缀。

  • 在第一行中,open写错了。看起来好像你想到的东西:

    (

    这会运行带有两个参数的命令if [ $(airport en1 -s | awk 'END {print NR}') -lt 11 ]; then ,并将输出发送到airport,后者会打印它读取的行数。

  • 使用awk计算行而不是awk可能会被视为过度杀伤。但是,它会起作用。

  • 您似乎在wc -l之后有一个电子邮件;这根本不是有效的。我不确定你是否打算使用NR(双破折号)或其他东西。 --可能在语法上有效,但在功能上毫无意义(如果你再也不会使用它,那么在递减数字时没有意义)。

  • 您的边界条件也有点可疑。

  • 不稳定的分组(10,4,3,3,3,3,4,6,5)也有点奇怪。请注意,您尝试运行--以获得24-27.mp3可能预期的内容,并且您可以27-30.mp3运行30-36.mp3

    < / LI>

也许你真的需要:

31-36.mp3

请注意,如果数字小于或等于10,测试将无法到达num_mp3=$(airport en1 -s | awk 'END {print NR}') if [ "$num_mp3" -le 10 ] then open ~/Desktop/1-10.mp3 elif [ "$num_mp3" -le 14 ] then open ~/Desktop/11-14.mp3 elif [ "$num_mp3" -le 17 ] then open ~/Desktop/15-17.mp3 … fi ,因此无需在该条件下重复边界测试。

答案 1 :(得分:0)

将输出捕获到变量中,以便对其进行不同的测试

if语句都需要有效的独立命令