Shell 脚本面试指南
💡
原文中文,约1700字,阅读约需4分钟。
📝
内容提要
本文介绍了20多个中高级Linux shell脚本面试问题,包括shebang、传递参数、单双引号区别、命令替换、文件检查、进程替换、管道、函数、进程分叉、关联数组、变量检查、read命令、条件语句中&&和||的区别等。每个问题都有示例和答案。
🎯
关键要点
- shebang 指定脚本的解释器,例如:#!/bin/bash。
- 向 shell 脚本传递参数使用 $1, $2 等作为位置参数。
- 单引号保留字面值,双引号允许变量扩展。
- 命令替换允许嵌入命令输出,例如:current_date=$(date)。
- 检查文件是否存在使用 if [ -e "$filename" ]; then ... fi。
- $? 表示最后一条命令的退出状态,0 表示成功,非 0 表示错误。
- here 文档用于多行输入,例如:cat <<EOFthis is textEOF。
- 使用 for 循环遍历目录中的文件,例如:for file in /path/to/dir/*; do echo "$file"; done。
- 进程替换允许将命令的输出视为文件,例如:diff <(command1) <(command2)。
- 将 stdout 和 stderr 重定向到一个文件使用命令 &> output.log。
- set -e 使脚本在任何命令返回非零状态时退出。
- 管道将一个命令的 stdout 连接到另一个命令的 stdin,例如:cat file.txt | grep "pattern"。
- 创建和使用函数的示例:my_function(){ echo "Hello, %1!"} my_function "Alice"。
- 进程分叉就是创建新进程,例如:forked_process &。
- 条件语句中 == 用于字符串比较,= 用于变量赋值。
- 捕获信号的示例:trap 'echo "Ctrl+C pressed"' INT。
- 关联数组允许键值对,例如:declare -A fruits; fruits["apple"]="red"。
- 检查变量是否为空使用 if [ -z "$var" ]; then ... fi。
- read 命令用于读取用户输入。
- 条件语句中 && 和 || 的区别:&& 表示左命令成功时执行右命令,|| 表示左命令失败时执行右命令。
➡️