BASH-如果没有显示用户,则运行MPlayer:0或者如果有多个参数

这是我现在的脚本 –

#!/bin/bash if["$#" == "2" OR who | grep ":0" == ""] export DISPLAY=:0 xset dpms force on mplayer -fs $1.mp4 fi 

它不起作用。

谢谢你的帮助。

你应该花一些时间阅读man test ,这在我看来就像你在这里有几个问题:

 if [ "$#" = "2" -o -z "$(who | grep ':0')" ]; then 
  • 注意后面的空格。
  • 注意字符串比较的一个等号。
  • 注意到-o是OR操作符。
  • 注意-z用于测试空字符串。
  • 注意$(...)来执行who命令。
  • 注意]之前的空间。
  • 然而,打印出时间和grep的人将会与许多对HH:MM:SS的误报相匹配。 你可能想要改善你的匹配。
  • 和其他答案一样,您应该检查$(who|grep)的成功,而不是测试空字符串输出。

在未来,更多的细节比“不行”更好;)

在BASH中,对NULL的测试是z ,例如, if [ -z "$NAME" ]; then ... if [ -z "$NAME" ]; then ... 但是,您可以轻松地使用grep的退出状态:

 root@tpost-desktop:/usr/src# who | grep :0 tpost tty7 2010-05-23 09:16 (:0) root@tpost-desktop:/usr/src# echo $? 0 root@tpost-desktop:/usr/src# who | grep :123 root@tpost-desktop:/usr/src# echo $? 1 

如果grep没有找到你要求的内容,它将以非零状态退出。 所以你可以做这样的事情:

 who | grep :0 >/dev/null 2>&1 if [ $? = 0 ]; then USING_DISPLAY=1 else USING_DISPLAY=0 fi 

然后测试USING_DISPLAY的值,如果它的0播放电影

if之后, [之后]和[之前]之后需要有一个空格。

 #!/bin/bash if [ "$#" == "2" ] || ! who | grep '(.*:0.*)$' > /dev/null 2>&1 then export DISPLAY=:0 xset dpms force on mplayer -fs $1.mp4 fi