我最近才开始使用 bash,但在使用一个简单的命令时遇到了麻烦。以下是脚本:
#!/bin/bash
if TouchpadOff=0; then
synclient TouchpadOff=1
echo "Touchpad has been turned off"
else
synclient TouchpadOff=0
echo "Touchpad has been turned on"
fi
基本上,我想做的是根据 pad 当前是打开还是关闭来切换 pad 的关闭或打开状态。当 pad 打开时,运行脚本会将其关闭,这正是我想要它做的事情。
但不知为何,当我再次运行它来打开触摸板时,它仍然处于关闭状态,并且仍然会回显“触摸板已关闭”,即使我想打开它。我希望有人能帮我解答我的问题。谢谢!
答案1
问题是你的 if 条件是错误的。它并没有按照你的想法去做。
if TouchpadOff=0; then
这将TouchpadOff=0
作为 shell 命令运行,创建一个变量$TouchpadOff
并为其分配值0
。由于这通常会成功运行,因此结果是条件始终为真。
您必须调用该synclient
命令并解析其输出以检查 TouchpadOff 属性的状态,例如这样:
if [[ "$(synclient | grep 'TouchpadOff' | awk '{print $3}')" -eq 0 ]] ; then
这将运行synclient | grep 'TouchpadOff' | awk '{print $3}'
,它解析 的输出以查找synclient
包含“TouchpadOff”的行并返回该行的第三列。
它位于命令替换 中$( ... )
,因此整个部分将被替换为内部命令的输出。
然后[[ ... -eq 0 ]]
检查替换的输出是否等于 0 并将其作为 if 语句的条件。
答案2
TouchpadOff=0
因为条件被解释为赋值,所以它始终为真(除非变量是只读的)。
使用数值比较:
if (( TouchpadOff == 0 )) ; then