上一篇
在Linux中比较字符串常用test命令或双括号[[ ]],通过=、!=运算符判断相等性,-z/-n检查空/非空字符串,注意变量加双引号防止语法错误,[ “$str1” = “$str2” ]。
使用 test 命令([ ] 或 [[ ]])
test 命令是Shell内置的字符串比较工具,支持 [ ](兼容性广)和 [[ ]](功能更强,推荐使用)。
基本语法
if [ "$str1" = "$str2" ]; then # 判断相等 if [[ "$str1" != "$str2" ]]; then # 判断不等 if [[ -z "$str" ]]; then # 判断空字符串 if [[ -n "$str" ]]; then # 判断非空字符串
示例
str1="hello"
str2="world"
if [[ "$str1" == "$str2" ]]; then
echo "字符串相等"
else
echo "字符串不相等" # 输出此结果
fi
注意事项
- 引号的重要性:变量需用双引号包裹(如
"$str"),避免含空格时被解析为多个参数。 - 等号写法: 和 在
[[ ]]中通用,但在[ ]中建议用 (兼容性更好)。 - 模式匹配:
[[ ]]支持通配符(如[[ $file == *.txt ]])。
使用 case 语句
适用于多条件分支匹配,语法简洁且支持通配符。
示例:检查文件类型
file="document.pdf"
case "$file" in
*.txt) echo "文本文件" ;;
*.pdf) echo "PDF文件" ;; # 匹配此项
*) echo "未知类型" ;;
esac
使用 expr 命令(兼容旧系统)
老式方法,适用于不支持 [[ ]] 的环境(如某些Bourne Shell)。
示例
if expr "apple" : "apple" > /dev/null; then
echo "匹配成功" # 输出此结果
fi
使用 awk(复杂文本处理)
适合在文本流或脚本中同时处理多行数据。

示例:比较两列数据
echo "apple orange" | awk '{if ($1 == $2) print "相等"; else print "不等"}' # 输出"不等"
使用 grep(模式匹配)
通过正则表达式间接比较,常用于过滤输出。
示例:检查变量是否包含子串
str="error: file not found"
if echo "$str" | grep -q "error"; then
echo "存在错误信息" # 输出此结果
fi
关键注意事项
-
空格处理:
- 赋值时无空格:
str="value" - 比较时有空格:
[ "$a" = "$b" ] - 遗漏空格会导致语法错误(如
[$a=$b]无效)。
- 赋值时无空格:
-
大小写敏感:
Linux默认区分大小写,需忽略大小写时,可转换变量:
if [[ "${str1,,}" == "${str2,,}" ]]; then # Bash 4.0+ 小写转换 -
特殊字符转义:
若字符串含 、 等,在[ ]中需用引号包裹;[[ ]]自动处理特殊字符。 -
空变量检查:
始终用-z(空)或-n(非空)显式判断,避免未定义变量导致的错误。
实际应用场景
场景1:用户输入验证
read -p "输入 yes 继续: " answer
if [[ "$answer" =~ ^[Yy][Ee][Ss]$ ]]; then # 正则匹配 yes/YES/Yes
echo "继续执行..."
else
echo "已取消"
fi
场景2:服务状态监控
status=$(systemctl is-active nginx)
if [[ "$status" == "active" ]]; then
echo "Nginx 运行中"
else
echo "Nginx 未运行"
fi
| 方法 | 适用场景 | 优势 |
|---|---|---|
[[ ]] |
条件判断、模式匹配 | 功能强大,支持通配符和正则 |
case |
多分支匹配(如文件类型) | 语法简洁,可读性高 |
awk/grep |
文本流处理或复杂数据 | 适合管道操作 |
expr |
兼容旧系统 | 无需Bash扩展 |
最佳实践:
- 脚本中优先使用
[[ ]],避免兼容问题时改用[ ]。 - 涉及大量文本处理时,选择
awk或grep提升效率。 - 始终包裹变量引号,明确处理空值和特殊字符。
引用说明:
- Bash手册(
man bash)中关于条件表达式(CONDITIONAL EXPRESSIONS)的章节。- POSIX Shell标准(IEEE Std 1003.1)对
test和case的定义。- GNU Awk用户指南(https://www.gnu.org/software/gawk/manual/)。
