Shell脚本:使用while循环使用[]检查字符串内容

时间:2013-12-09 06:08:55

标签: shell loops while-loop

我正在尝试检查从程序输出的字符串,如果字符串与某个内容匹配,则while循环将停止该程序。与此同时,我需要计算程序运行的次数:

x = "Lookup success"  # this is supposed to be the output from the program
INTERVAL=0  # count the number of runs

while ["$x" != "Lookup failed"]   # only break out the while loop when "Lookup failed" happened in the program
do
   echo "not failed"     # do something
   $x = "Lookup failed"     # just for testing the break-out
   INTERVAL=(( $INTERVAL + 10 )); # the interval increments by 10  
done

echo $x
echo $INTERVAL

但是这个shell脚本无效,出现此错误:

./test.sh: line 9: x: command not found 
./test.sh: line 12: [[: command not found 
有人可以帮帮我吗?感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

[命令名称周围需要空格。在命令末尾的]参数之前还需要一个空格。

您也无法在shell中分配空格。而你在循环中的作业在开始时不需要$

x="Lookup success"
INTERVAL=0  # count the number of runs

while [ "$x" != "Lookup failed" ]
do
    echo "not failed"
    x="Lookup failed"
    INTERVAL=(( $INTERVAL + 10 ))  
done

echo $x
echo $INTERVAL

答案 1 :(得分:1)

[之后和]之前添加空格。

另外,正如乔纳森所说,你也不能在任务中占用空间。

答案 2 :(得分:0)

不确定是否有接受INTERVAL =((...))的shell;我在两个平台上的ksh和bash版本没有。 INTERVAL = $((...))确实有效:

#!/bin/bash

x="Lookup success"
INTERVAL=0  # count the number of runs

while [ "$x" != "Lookup failed" ]
do
    echo "not failed"
    x="Lookup failed"
    INTERVAL=$(( $INTERVAL + 10 ))  
done

echo $x
echo $INTERVAL

积分转到@JonathanLeffler。我会欣赏up-votes以便下次我不必复制粘贴其他人的解决方案来指出一个简单的拼写错误(评论权利以rep> = 50开头)。