代码之家  ›  专栏  ›  技术社区  ›  Magnus Melwin

bash脚本在grep语句上终止

  •  1
  • Magnus Melwin  · 技术社区  · 6 年前

    很难理解为什么我的bash脚本会提前终止

    echo "Checking for ANY QUERY"
    dig +short $MYHOSTWITHOUTWWW  any | tr '[A-Z]' '[a-z]'  > $HOME/$MYHOST-$MYTIMESTAMP/$MYHOST-$MYTIMESTAMP-anyquery.txt
    ANYQUERY_STATUS=`grep -iwo 'disabled' $HOME/$MYHOST-$MYTIMESTAMP/$MYHOST-$MYTIMESTAMP-anyquery.txt`
    
    if [[ "$ANYQUERY_STATUS" = "disabled"  ]]; 
    then
        echo "disabled" > $HOME/$MYHOST-$MYTIMESTAMP/$MYHOST-$MYTIMESTAMP-anyquerybug.txt
    else
        echo "enabled" > $HOME/$MYHOST-$MYTIMESTAMP/$MYHOST-$MYTIMESTAMP-anyquerybug.txt
    fi
    
    echo "Checking for Generic top level domains availabilty"
    touch  $HOME/$MYHOST-$MYTIMESTAMP/$MYHOST-$MYTIMESTAMP-domain-gtld.txt
    

    但是,程序在'anyquery_status='grep-iwo'disabled'语句处停止并退出。它不执行脚本的其余部分。

    我们将非常感谢您的帮助。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Nick    6 年前

    这个 grep 命令返回退出状态1以指示没有匹配的行时,这将导致变量分配失败。最好直接在脚本中执行命令,然后使用 $? .

    更改脚本的逻辑,以便直接使用状态:

    grep -iwo 'disabled' $HOME/$MYHOST-$MYTIMESTAMP/$MYHOST-$MYTIMESTAMP-anyquery.txt
    if [[ $? = 0 ]];