我的预期目标是创建一个脚本,该脚本在运行时将检查设置的状态,然后将其更改为相反的状态。有问题的设置与 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"
同样,相同(缺乏)结果。
在这种情况下,该语句是合适的工具,但是,可以考虑作为单次运行相关命令的
if
替代语句,并且可以说是更简洁的语法。case
请注意,有
gsettings get
问题的命令返回单引号字符串,因此您需要检查它。至于您的特定代码,问题是您正在进行字符串比较,但您确实需要命令替换
$()
这是您编辑的代码。请注意,语法也不正确,没有
else if
但有elif
shell 语法。此外,这两个测试两次调用相同的命令。这效率不高。使用单个命令替换,如Gavin 的答案所示您的问题是您不能在 if/then 语句中使用命令。
这是固定代码: