RHEL服务器主机名含serapp字符串的检测命令问题
解决主机名包含特定字符串的判断问题
我来帮你搞定这个需求!你之前使用的uname -n | cut -c3,4命令只是截取了主机名的第3、4个字符,自然没法判断整个主机名里是否包含serapp字符串。下面给你几个实用且可靠的解决方案:
方案1:使用grep静默匹配
grep的-q参数会让它静默运行,不输出任何内容,只通过退出码来表示是否匹配到目标字符串(0表示匹配成功,非0表示失败)。
可以直接在命令行或者脚本里这样用:
# 分步骤判断并输出结果 if uname -n | grep -q "serapp"; then echo "true" else echo "false" fi # 或者一行简化版 uname -n | grep -q "serapp" && echo true || echo false
方案2:Bash原生字符串匹配(推荐)
利用Bash自身的字符串通配符匹配,不需要调用外部命令,效率更高:
# 先获取主机名再判断 hostname=$(uname -n) if [[ "$hostname" == *serapp* ]]; then echo "true" else echo "false" fi # 一行精简版 [[ $(uname -n) == *serapp* ]] && echo true || echo false
这里的*是通配符,代表任意长度的任意字符,*serapp*就表示主机名中任意位置包含serapp的情况。
方案3:使用case语句(适合脚本场景)
如果是在Shell脚本里做判断,case语句的可读性更好:
case $(uname -n) in *serapp*) echo "true" ;; *) echo "false" ;; esac
额外说明
如果你的需求只是在脚本中做条件判断(不需要输出true/false),可以直接用条件表达式的退出码:
if [[ $(uname -n) == *serapp* ]]; then # 这里写匹配成功后要执行的操作 echo "主机名包含serapp" fi
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

