2013-07-03 92 views
0

我試圖測試節能啓動和關機設置通過shell只是我的字符串比較始終沒有殼字符串比較是不工作

響應這裏是我的代碼

#!/bin/sh 

pmset repeat shutdown MTWRFSU 19:00:00 wakeorpoweron MTWRF 07:00:00 

test=`pmset -g sched` 
schd="Repeating power events: wakepoweron at 7:00AM weekdays only shutdown at 7:00PM every day" 
echo $schd; 
echo $test; 
if [ '$test' = '$schd' ]; then 
    echo "yes" 
else 
    echo "no" 
fi 

什麼時我在這裏做錯了嗎?

添加這是在我的測試命令的輸出作爲一切似乎是爲了預期

test2="Repeating power events: wakepoweron at 7:00AM weekdays only shutdown at 7:00PM every day" 
schd2="Repeating power events: wakepoweron at 7:00AM weekdays only shutdown at 7:00PM every day" 

if [ "$test2" = "$schd2" ]; then 
    echo "yes" 
else 
    echo "no" 
fi 

我懷疑有隱藏字符,這是返回的是有一些方法來確認和根除他們,如果那實際上是問題所在?

+0

@chepner我把它改成了雙引號,因爲我已經試過用雙引號,但仍然沒有成功,因此是的,仍然有一個問題,因爲它仍然不能用雙引號 – mcgrailm

回答

1

如果你覺得$測試可能有多餘的字符,嘗試爲$測試包含 $ SCHD:

case "$test" in 
*"$schd"*) echo yes ;; 
*) echo no ;; 
esac 

嘗試改變

echo $schd; 
echo $test; 

echo "schd=>$schd<" 
echo "test=>$test<" 
+0

好吧,這是它!即使我曾嘗試將縮進歸因於縮進,但它出現錯誤,但這讓我看到了問題 – mcgrailm

2

變量引用不在單引號內解析;使用雙引號來代替:

if [ "$test" = "$schd" ]; then... 

另外請注意,如果任$schd$test解析爲空字符串上面的測試將無法正常工作。常用的技巧來解決,這是如下:

if [ x"$test" = x"$schd" ]; then... 
+0

'x'技巧是隻有當字符串不是雙引號時才需要(雖然它也不會傷害任何東西) –

+0

我已經試過用雙引號,但改變它們然後嘗試你的解決方法以及 – mcgrailm

+2

是否有可能隱藏字符(如\ n \ r)導致比較問題 – mcgrailm