Shell脚本实战:10个面试高频题解析与避坑指南(附完整代码)
在技术面试中,Shell脚本能力往往是评估候选人Linux系统管理功底的重要标尺。无论是运维工程师、DevOps专家还是后端开发者,面对文件处理、日志分析、自动化部署等场景时,优雅的Shell脚本总能大幅提升工作效率。本文精选10道高频面试题,从实际解题思路到常见陷阱规避,配合可直接运行的代码示例,助你系统掌握Shell脚本的核心竞争力。
1. 变量处理中的"隐藏杀手"
1.1 未初始化变量的连锁反应
#!/bin/bash
# 危险示例:未处理未定义变量
if [ $undefined_var = "test" ]; then
echo "Match found"
fi
运行时会立即报错:
line 3: [: =: unary operator expected
安全写法:
#!/bin/bash
# 正确处理未定义变量
if [ "${undefined_var:-}" = "test" ]; then
echo "Match found"
fi
关键技巧:使用
${var:-default}语法为变量设置默认值,避免脚本因未定义变量而中断执行
1.2 字符串比较的三种姿势对比
| 比较方式 | 空值处理 | 模式匹配 | 执行效率 | 推荐场景 |
|---|---|---|---|---|
[ "$a" = "$b" ] |
安全 | 不支持 | 高 | 精确匹配 |
[[ $a == $b ]] |
安全 | 支持 | 中 | 通配符匹配 |
test "$a" = "$b" |
安全 | 不支持 | 低 | 兼容老系统 |
# 模式匹配最佳实践
filename="log_20230815.txt"
if [[ $filename == log_*.txt ]]; then
echo "Log file detected"
fi
2. 参数传递的进阶技巧
2.1 动态参数解析模板
#!/bin/bash
# 高级参数处理示例
while [[ $# -gt 0 ]]; do
case $1 in
-u|--user)
username="$2"
shift 2
;;
-d|--debug)
debug_mode=true
shift
;;
*)
files+=("$1")
shift
;;
esac
done
echo "User: ${username:-anonymous}"
echo "Files to process: ${files[@]}"
执行示例:
./script.sh -u admin file1.txt file2.txt --debug
2.2 参数验证三板斧
-
数量校验:
if [ $# -lt 2 ]; then echo "Usage: $0 <source_dir> <target_dir>" >&2 exit 1 fi

766

被折叠的 条评论
为什么被折叠?



