2010-05-23 66 views
2

這是劇本我目前有─BASH-運行MPlayer如果任一有上顯示沒有用戶:0或如果有多個參數

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

它不工作。

感謝您的幫助。

+0

Rob,你能更清楚地知道什麼不起作用嗎? – Anero 2010-05-23 16:05:21

+0

即使有人正在播放電影,劇本也只播放電影:0 .... – rob 2010-05-23 16:14:14

+0

問題可能與--- grep「:0」==「」--- part – rob 2010-05-23 16:15:00

回答

3

你應該花一些時間閱讀man test,它看起來像你對我已經有了幾個問題在這裏:在[

if [ "$#" = "2" -o -z "$(who | grep ':0')" ]; then 
  • 通知的空間。
  • 注意字符串比較的一個等號。
  • 請注意-o是OR運算符。
  • 注意-z用於測試空字符串。
  • 注意$(...)執行who命令。
  • 請注意]之前的空格。
  • 但是,who會打印出時間,而grep會與很多針對HH:MM:SS的誤報相匹配。你可能想要改善你的匹配。
  • 和其他答案一樣,您應該檢查$(who|grep)的成功,而不是測試空字符串輸出。

在未來,不是 「它不工作」,更詳細地優選的;)

1

在bash,測試爲NULL是 - z,e.g if [ -z "$NAME" ]; then ...。然而,你可以很容易地使用退出狀態可以從grep來代替:

[email protected]:/usr/src# who | grep :0 
tpost tty7   2010-05-23 09:16 (:0) 
[email protected]:/usr/src# echo $? 
0 

[email protected]:/usr/src# who | grep :123 
[email protected]:/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

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 
相關問題