2013-07-03 130 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