Bash脚本“未找到fi行”

时间:2012-08-20 17:39:11

标签: linux bash

这是我的第一个bash脚本,基本上只关闭了我的第二台显示器。但我一直遇到问题,因为它在我运行时一直给我错误。

#!/bin/bash


read -p "Do you want the 2nd monitor on or off? " ON_OFF

if [$ON_OFF == on]; then
xrandr --output DVI-I-3 --auto --right-of DVI-I-0
echo "done"
fi

if [$ON_OFF == off]; then
xrandr --output DVI-I-3 --off   
echo "done"
fi

当我运行它时,我得到了

monitor_control.sh: 11: [[off: not found
monitor_control.sh: 16: [[off: not found

有人可以向我解释为什么它不起作用吗?

2 个答案:

答案 0 :(得分:4)

您需要在[]周围添加空格,因为它们是bash中的单独命令。

此外,需要在参数扩展周围使用引号,或者需要使用[[ ]]代替[ ]

也就是说,您可以使用:

if [[ $ON_OFF = on ]]

......或者您可以使用:

if [ "$ON_OFF" = on ]

否则,如果$ON_OFF为空,则会收到错误。

最后,最好使用if ... then ... else ... fi,例如:

if [[ $ON_OFF = on ]]; then
    xrandr --output DVI-I-3 --auto --right-of DVI-I-0
else
    xrandr --output DVI-I-3 --off   
fi
echo "done."

答案 1 :(得分:0)

这应该有用。

#!/bin/bash


echo -n "Do you want the 2nd monitor on or off? "
read ON_OFF;

if [ $ON_OFF == "on" ]; then
  xrandr --output DVI-I-3 --auto --right-of DVI-I-0
  echo "done"
fi

if [ $ON_OFF == "off" ]; then
  xrandr --output DVI-I-3 --off
  echo "done"
fi