使用短划线检查子串的字符串

时间:2014-12-12 07:50:25

标签: bash shell ubuntu dash-shell

我希望我的motd能够很好地概述我的系统状态。 ATM我试图检查deamon是否正在运行,并根据它的状态对其进行着色。

通常你会输入deamon_name status并输出类似Deamon_name running / not running的内容。我得到了它,我检查是否包含Not。这很有用。

然后我注意到,当我实际登录并触发MOTD时,我得到了一些错误的信息,然后我注意到我需要使用dash而不是bash或shell。 现在我的比较功能已经不再适用了。

if [[ $Server_name =~ .*Not.* ]]
    then 
        printf "NOT RUNNING";
    else 
        printf "RUNNING";
fi

这是我的比较功能和检查(后来我想添加颜色红/绿)

$ Server_name Not running.running

2 个答案:

答案 0 :(得分:3)

dash中,您可以使用案例陈述进行模式匹配,这也适用于bash

case $Server_name in 
  (*Not*) printf "NOT RUNNING" ;;
  (*)     printf "RUNNING"
esac

case $Server_name in 
  (*Not*) printf "NOT "
esac
printf "RUNNING"

答案 1 :(得分:0)

我通过比较init脚本中的整个Server RunningNot Running字符串来解决它,因为我知道这些消息和破折号不支持扩展功能,这似乎是合适的。

if [ "$ServerName" = "Not running." ]                # I know those messages
    then 
        printf '%b' "\033[31;1mNOT RUNNING\033[0m"   # print NOT RUNNING in red
    else 
        printf '%b' "\033[32;1mRUNNING\033[0m"       # print RUNNING in greend
fi

printf "\n"