我正在尝试编写一个可以打开或关闭WiFi的脚本。
我在使用“if”语句时遇到问题。我从一个简单的脚本开始,它应该告诉你Wifi是打开还是关闭。它不像书面那样工作。无论WiFi状态如何,我都会“无线关闭”
#!/bin/sh
STATUS=`networksetup -getairportpower en0`
if $STATUS == On
then
echo "Wifi is on"
else
echo "Wifi is off"
fi
答案 0 :(得分:0)
您应使用[expr]来评估逻辑表达式。所以,条件就像:
if [ $STATUS == On ]
如果您需要评估更详细的表达式,可以使用[[expr]]。两者的含义在this section of bash manual中解释。
答案 1 :(得分:0)
来自networksetup
的文字值不仅仅是“开启”(在我的机器上)“Wi-Fi Power (en0): On
”。因此,我们需要考虑“On”之前的文本,我们可以使用 glob模式,星号(*)表示“零或更多任何字符”。为此,我们需要在[[
语句中使用双if
命令:
#!/bin/bash
status=$(networksetup -getairportpower en0)
if [[ $status == *On ]]
then
echo "Wifi is on"
else
echo "Wifi is off"
fi
其他说明:我使用的是#!/bin/bash
,而不是sh
。 sh
是一个POSIX shell,它(可以说是)bash的一个子集。如果您需要bash
,则应在#!
行指定,而不是sh
。
我使用了$( )
符号而不是后退符号(``)。反向标记被认为已弃用且难以阅读。
请注意[[
和]]
周围和内部的空格,它们是必需的。
我已将STATUS替换为status
。这是因为shell使用了许多大写变量名,因此使用大写会冒名称冲突。最好使用较低或混合大小写的变量名称。