如何在linux(True或False)bash命令上设置切换?

时间:2015-02-18 16:07:14

标签: bash ubuntu trackpad

我目前已经分配了我的thinkvantage按钮来关闭点按我的触控板,但我想将其转换为开关的开关。

目前,这是我用来关闭它(或用CTRL打开)的bash命令:

gsettings set org.gnome.settings-daemon.peripherals.touchpad tap-to-click true
gsettings set org.gnome.settings-daemon.peripherals.touchpad tap-to-click false

有没有办法让这个切换命令? 换句话说,我是否将其变为条件bash语句。

3 个答案:

答案 0 :(得分:5)

大概是这样的:

#!/bin/bash
class=org.gnome.settings-daemon.peripherals.touchpad
name=tap-to-click
status=$(gsettings get "$class" "$name")
status=${status,,} # normalize to lower case; this is a modern bash extension
if [[ $status = true ]]; then
  new_status=false
else
  new_status=true
fi
gsettings set "$class" "$name" "$new_status"

将其分解成碎片:

  • #!/bin/bash确保此脚本的解释器为bash,启用[[ ]]等扩展语法。
  • 语法$( )是“命令替换”;这会运行一个命令,并替换该命令的输出。因此,如果输出为true,则status=$(...)变为status=true
  • 参数扩展${name,,}会在将这些内容转换为全小写时扩展name的内容,并且仅在较新版本的bash中可用。如果您想支持/bin/sh或更早版本的bash,请考虑使用status=$(printf '%s\n' "$status" | tr '[:upper:]' '[:lower:]'),或者如果gsettings get的输出始终为小写,则只需删除此行。
  • 比较[[ $status = true ]]依赖于bash扩展[[ ]](在其他现代ksh派生的shell中也可用),以避免引用。如果您希望它与#!/bin/sh一起使用,则可以使用[ "$status" = true ]。 (请注意,==允许[[ ]],但纯POSIX shell上的[ ]允许 ;这就是为什么最好不要在使用它的习惯)。

请注意,空格在bash中很重要! foo = barfoo= barfoo=bar是完全不同的陈述,所有这三种陈述都与其他两种陈述不同。一定要认识到从这个例子中复制的差异。

答案 1 :(得分:1)

在Ubuntu Unity时钟上切换秒数(可直接作为键绑定的命令):

bash -c 'gsettings set com.canonical.indicator.datetime show-seconds $(gsettings get com.canonical.indicator.datetime show-seconds | perl -neprint/true/?false:true)'

对于GNOME:

bash -c 'gsettings set org.gnome.desktop.interface clock-show-seconds $(gsettings get org.gnome.desktop.interface clock-show-seconds | perl -neprint/true/?false:true)'

答案 2 :(得分:0)

来源:https://www.commandlinefu.com/commands/view/24256/toggle-the-touchpad-on-or-off

synclient TouchpadOff=$(synclient -l | grep -q 'TouchpadOff.*1'; echo $?)

tp=$(synclient -l | grep TouchpadOff | awk '{ print $3 }') && tp=$((tp==0)) && synclient TouchpadOff=$tp