Shell脚本if判断$HOST匹配异常问题排查与解决
Shell脚本主机名判断问题排查与解决
在本地笔记本执行echo $HOST时,能正确输出主机名Nbook,但编写的Shell脚本却出现以下异常:
- 最初的脚本无论if条件中设置什么主机名,都会始终执行第一个echo命令
- 调整if条件里
=两侧的空格后,仍未得到预期结果(本该输出“This is Nbook”,实际输出“Unknown host”) - 改用
$(hostname)命令获取主机名后,脚本终于正常运行
原错误代码
#!/bin/sh if [ $HOST="whatever!" ]; then echo "This is Nbook" # always executes! elif [ $HOST="PC" ]; then echo "This is PC" else echo "Unknown host" fi
修改空格后仍异常的代码
#!/bin/sh if [ "$HOST" = "Nbook" ]; then echo "This is Nbook" elif [ "$HOST" = "PC" ]; then echo "This is PC" else echo "Unknown host" fi
最终可用代码
#!/bin/sh host=$(hostname) if [ "$host" = "Nbook" ]; then echo "This is Nbook" elif [ "$host" = "PC" ]; then echo "This is PC" else echo "Unknown host" fi
问题原因说明
- 原脚本错误:
[ $HOST="whatever!" ]中=两侧没有空格,Shell会将其解析为字符串赋值操作(把whatever!赋值给$HOST),而非比较操作,赋值表达式的返回值为真,因此第一个分支始终执行。 - 修改空格后仍异常:部分环境中
HOST变量仅存在于当前用户的交互Shell环境,未被导出到脚本的执行环境中,导致脚本内$HOST为空值,无法匹配预设的主机名条件。 - 最终方案有效:
$(hostname)是直接调用系统命令获取主机名,不受环境变量是否导出的影响,能准确获取当前主机的名称,因此条件判断可以正常工作。
内容的提问来源于stack exchange,提问作者Manojit
相关产品推荐
相关产品推荐

