我的目标是创建一个脚本,在运行时检查设置的状态,然后将其更改为相反的状态。 有问题的设置与 Ubuntu 设置中代理设置的手动或禁用状态有关。
我可以使用以下命令手动获取此设置的状态:
gsettings get org.gnome.system.proxy mode
这将返回auto
、manual
或none
。我不使用第一个状态,所以从现在开始让我们忽略它。现在,一旦返回状态,我使用脚本的目标是运行以下命令之一:
gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy mode 'none'
它运行的命令将处于当前未设置的状态。为此,我在脚本中尝试了以下内容:
if [ 'gsettings get org.gnome.system.proxy mode' = 'none' ]
then
gsettings set org.gnome.system.proxy mode 'manual'
notify-send "Manual"
else
if [ 'gsettings get org.gnome.system.proxy mode' = 'manual' ]
then
gsettings set org.gnome.system.proxy mode 'none'
notify-send "Disabled"
fi
fi
这保存在应用了 chmod +x 的文件中。从终端运行时,什么也没发生。我只是得到一个新行来等待新命令。
我哪里做错了?
此外,是否可以让它在一行上工作,如下所示:
sh -c "if [ $(gsettings get org.gnome.system.proxy mode) = \"'none'\" ];then gsettings set org.gnome.system.proxy mode 'manual' && notify-send \"Manual\";elif [ $(gsettings get org.gnome.system.proxy mode) = \"'manual'\" ];then gsettings set org.gnome.system.proxy mode 'none' && notify-send \"Disabled\";fi"
再次,结果相同(缺乏)。
答案1
然而,在这种情况下,该if
语句是合适的工具,可以考虑将其case
作为相关命令的单次运行的替代语句,并且可以说语法更清晰。
case "$(gsettings get org.gnome.system.proxy mode)" in
"'none'") gsettings set org.gnome.system.proxy mode "'manual'"
notify-send "manual";;
"'manual'") gsettings set org.gnome.system.proxy mode "'none'"
notify-send "Disabled" ;;
esac
请注意,gsettings get
有问题的命令返回单引号字符串,因此您需要检查这一点。
至于您的具体代码,问题在于您正在进行字符串比较,但您确实需要命令替换$()
if [ "$(gsettings get org.gnome.system.proxy mode)" = "'none'" ]
then
gsettings set org.gnome.system.proxy mode "'manual'"
notify-send "Manual"
elif [ "$(gsettings get org.gnome.system.proxy mode)" = "'manual'" ]
then
gsettings set org.gnome.system.proxy mode "'none'"
notify-send "Disabled"
fi
这是您编辑的代码。请注意,语法也不正确,shell 语法中没有,else if
但有elif
。此外,两个测试两次调用相同的命令。这效率不高。使用单个命令替换,如下所示Gavin 的回答
答案2
您的问题是您不能在 if/then 语句中使用命令。
修复后的代码如下:
#!/bin/bash
output=$(gsettings get org.gnome.system.proxy mode)
if [ "$output" = 'none' ]
then
gsettings set org.gnome.system.proxy mode 'manual'
notify-send "Manual"
else
if [ "$output" = 'manual' ]
then
gsettings set org.gnome.system.proxy mode 'none'
notify-send "Disabled"
fi
fi