我有以下问题:
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教程......)
答案 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 Renouf中comment注明)。
'
拼写为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
。
也许你真的需要:
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语句都需要有效的独立命令