如何从变量中包含一个确切的单词包含句子

时间:2014-02-21 17:52:30

标签: bash grep

我已经尝试过我的知识来获得结果,但我不能。我请你以正确的方式指导我。

Bellow是我的bash脚本,它实际上是一个init.d脚本。

#!/bin/bash

LOG_LEVEL="info debug_rpc warn test critical debug_sql error debug debug_rpc_answer notset"
CHECK_LOG_LEVEL=$2

logcheck() {
if [ ! -z $CHECK_LOG_LEVEL ]; then
    if [ "$(grep -o "$LOG_LEVEL")" == "$CHECK_LOG_LEVEL" ]; then
       echo "Starting the daemon with log_level"
    else
        echo "Check if the log-level argument name is correct!"
    exit 1
    fi
else
    echo "Starting the daemon"
fi
}

case "${1}" in
        start)
                logcheck
                ;;
        esac

exit 0

我希望grep与确切的单词匹配。因为debug_rpc,debug_rpc_answer,debug_sql

如果您通过运行脚本用户犯了错字错误: sudo /etc/init.d/myscript.sh start debug_rp

需要显示{echo“检查日志级参数名称是否正确!”}

我试图将存储在变量$ CHECK_LOG_LEVE中的确切用户参数与内容$ LOG_LEVEL

进行匹配

对此的任何指导或解决方法..

感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用此grep -qw(匹配字):

if grep -qw "$CHECK_LOG_LEVEL" <<< "$LOG_LEVEL"; then
    echo "valid log-level argument"
else
    echo "Check if the log-level argument name is correct!"
fi

之后,您可以使用$?

查看退货状态

答案 1 :(得分:2)

LOG_LEVEL="info debug_rpc warn test critical debug_sql error debug debug_rpc_answer notset"
CHECK_LOG_LEVEL=$2

# spaces below are very deliberate
if [[ " $LOG_LEVEL " != *" $CHECK_LOG_LEVEL "* ]]; then
    echo "invalid log level" >&2
    exit 1
fi

“debug_rp”不会通过该检查,但如果有人确定提供无效输入,则“info debug_rpc”将会通过


要进行精确匹配,请使用数组:

LOG_LEVEL=( info debug_rpc warn test critical debug_sql error debug debug_rpc_answer notset )
CHECK_LOG_LEVEL=$2

found=false
for lvl in "${LOG_LEVEL[@]}"; do
    if [[ $CHECK_LOG_LEVEL == $lvl ]]; then
        found=true
        break
    fi
done
if ! $found; then
    echo "invalid log level" >&2
    exit 1
fi