Bash 函数与流程控制:read、if、for、case 验证

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,但不要跟踪含凭据脚本。

相关推荐
清晨Coding11 分钟前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js
johnjincaaaa14 分钟前
猿人学第 18 题「jsvmp 洞察先机」逆向通关实录
javascript·后端
鶴哥只手遮天27 分钟前
《Electron 45.2.3 内核解剖》第 4 章 补丁体系:380 个补丁改了什么
前端·electron
一条破秋裤1 小时前
【1114】【并发控制】【笔记】
linux
2035去旅行2 小时前
ADB的底层原理
linux·adb·嵌入式·arm·soc
武子康2 小时前
单卡 A6000 跑 Qwen-Drive:怎样留下可比较的第一条基线?
linux·人工智能·深度学习
女神下凡2 小时前
芯参谋(107):杰理AC_中科蓝讯_开发指南
linux·服务器·网络·单片机·嵌入式硬件
落羽的落羽3 小时前
【C++】C++17的主要特性
linux·服务器·开发语言·c++·算法·机器学习
FungLeo3 小时前
成为全栈·Vue 管理后台篇·分类树与标签管理:层级数据如何落到管理界面
前端·javascript·vue.js·分类树·naive ui·标签管理·前端数据结构
总要学点什么3 小时前
第108篇:三维特效-图片轨迹线效果——把贴图滚成一串箭头,想用它的本色反而整条消失
开发语言·javascript·ecmascript·gis·webgl·材质·cesium