Bash 函数与流程控制:read、if、for、case 验证
1. 用途介绍
函数复用脚本逻辑,read 接收输入,if/case 分支判断,for/while/until 控制循环。本文修正原笔记大小写、反引号测试和文件类型判断,示例只读检查,不修改文件。
2. 准备运行环境
Linux 与 Bash、普通账号即可,不需要 root 或网络服务。代码保存为 demo.sh,先 bash -n demo.sh 检查语法,再 bash demo.sh 执行。
3. 相关知识与注意点
• Bash 关键字区分大小写,使用 if、then、fi、for、do、done、case、esac。
• read 是内置命令,不是系统函数;使用 read -r 避免反斜杠转义。
• 与 两侧需要空格;变量使用双引号,避免空值与空格导致参数错位。
• test 直接返回退出状态,不应把 test 放入反引号当作命令运行。
• 不是普通文件也未必是目录,还可能是设备、链接或其他类型。
• return 返回函数退出状态;exit 终止脚本。函数变量使用 local 限定作用域。
4. 实验步骤
bash
#!/usr/bin/env bash
check_path() {
local path="$1"
if [ -f "$path" ]; then
printf 'regular file: %s\n' "$path"
elif [ -d "$path" ]; then
printf 'directory: %s\n' "$path"
elif [ -e "$path" ] || [ -L "$path" ]; then
printf 'other entry: %s\n' "$path"
else
printf 'not found: %s\n' "$path"
return 1
fi
}
read -r -p 'Path: ' filename || exit 1
check_path "$filename"
循环与分支:
bash
for ((i=1; i<=3; i++)); do
printf '%s\n' "$i"
done
mode=check
case "$mode" in
check) printf 'checking\n' ;;
*) printf 'unknown mode\n' ;;
esac
while 条件为真时继续,until 条件为假时继续。循环要确保状态变化和退出条件,避免无限运行。
5. 原实验截图

!image2(https://i-blog.csdnimg.cn/direct/399571b3aec94075881548917312a857.png)
6. 验证命令
bash -n demo.sh 检查语法;bash demo.sh 分别输入已存在文件、目录、包含空格的路径及不存在路径。预期得到对应分类,不存在时函数返回1;单独示例循环输出1、2、3,case输出checking。未在本机Linux执行,以上为预期结果。调试可用 bash -x demo.sh,但不要跟踪含凭据脚本。