我正在尝试编写一个简单的外壳脚本来隐藏/显示我的桌面图标,但是在尝试运行它时出现错误“ hidedesktopicons.sh:第1行:[[gsettings:找不到命令”?
我搜索了如何在shell脚本中使用if语句。我加了“ fi”
enter code here
cat hidedesktopicons.sh
if [[gsettings get org.mate.background show-desktop-icons = true]]
then gsettings set org.mate.background show-desktop-icons false
else gsettings set org.mate.background show-desktop-icons true
fi
我希望图标可以隐藏/取消隐藏。我收到错误消息“ hidedesktopicons.sh:第1行:[[gsettings:找不到命令”
答案 0 :(得分:0)
直接的问题是,[[
之后需要空格:
if [[ gsettings ...
下一个问题是您需要使用命令替换来捕获gsettings
的输出,以便可以将其与true
进行比较:
if [[ $(gsettings get org.mate.background show-desktop-icons) = true ]]
then gsettings set org.mate.background show-desktop-icons false
else gsettings set org.mate.background show-desktop-icons true
fi
您可能想要定义一对函数以减少此代码的某些重复性:
get_icon_status () {
gsettings get org.mate.background show-desktop-icons
}
set_icon_status () {
gsettings set org.mate.background show-desktop-icons "$1"
}
if [[ $(get_icon_status) = true ]]; then
set_icon_status false
else
set_icon_status true
fi
答案 1 :(得分:0)
与常见的编程语言相比,Bash确实没有true
和false
的关键字。因此,如果程序在终端中返回字符串值“ true”,它将仅将其视为与“ foo”或“ bar”具有相同性质的字符串。bash中的if
语句不评估什么由命令返回,它将评估命令的返回码。
if list1; then list2; else list3; fi
应读取为:如果执行了list1
并且返回码为0,它将执行list2
,否则执行list3
。 >
为充分演示,我使用以下令人困惑的命令:
$ if echo true; then echo yes; else echo no; fi
true
yes
$ if echo false; then echo yes; else echo no; fi
false
yes
如您所见,echo true
返回值true
,echo false
返回值false
,但两者都返回yes
,这仅表明{{1} }命令成功执行。如果我们知道使用二进制文件echo
和true
false
if语句中使用的常见命令之一是$ which true; true; echo $?
/usr/bin/true
0
$ if true; then echo yes; else echo no; fi
yes
$ which false; false; echo $?
/usr/bin/false
1
$ if false; then echo yes; else echo no; fi
no
命令,通常写为test
或bash复合命令[ EXPRESSION ]
,如果if语句,则返回码均为0 [[ EXPRESSION ]]
的计算结果为true,如果EXPRESSION
为false,则计算结果为1。这些命令可用于执行OP给出的字符串评估。
EXPRESSION