我已经尝试过我的知识来获得结果,但我不能。我请你以正确的方式指导我。
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
进行匹配对此的任何指导或解决方法..
感谢。
答案 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