shell脚本if else循环不起作用

时间:2014-01-11 06:13:31

标签: bash shell debugging command-line

鉴于以下程序读取用户输入两次

function search_grep
{
   if [ "$2" == "" ];then
    for x in "${title[@]}" 
    do
    value=$(echo $x | grep "$1")

        if [ "$value" != "" ];then
        echo "$value"
        fi      

    done
   elif [ "$1" == "" ];then
    hello="123"
    echo "$hello"   

   fi          

}

echo -n "Enter title : "
read book_title

echo -n "Enter author : "
read author

title=(CatchMe HappyDay)
search_grep $book_title $author

当我输入后跟HappyDay HOWEVER

时,它按预期工作

当我输入foo后跟时,我希望控制台输出

  

123

相反,我得到了

  

有人可以向我解释,虽然第二个输入是

,但程序没有执行第二个elif循环

2 个答案:

答案 0 :(得分:1)

在两种情况下,以下情况:

search_grep $book_title $author

扩展为使用单个参数的调用。因此,“then”子句被激活。原因是由空格组成的不带引号的参数扩展为空,并消失。这就是bash的方式。

如果你想传递search_grep两个参数,那么你需要引用变量:

search_grep "$book_title" "$author"

答案 1 :(得分:0)

如图here所示,您可以尝试使用=而不是==

或者对于空字符串比较,请尝试-z