Bash Shell 流程控制 —— select

前言

今天刚好写了一个自动化打包脚本,再次使用到了bash shell,好幸福的感觉。这里主要是想介绍一下select命令,这个命令可以帮助我们完成菜单选择功能。

格式

我今天也是第一次使用select流程控制,在php、Java、C这些语言中并没有实现select功能。Bash Shell中,select格式如下:
select $var in ${list[@]}
do
    statements that can use $var
done
在select执行时,会根据list数组给出选择菜单,用户选择后的结果保存在$var变量中,然后执行statements语句。执行完成后,再次给出菜单,等待用户选择。如果用户想跳出选择循环,需要在循环体中根据条件增加break语句。

示例

给出一个select的示例,大家可以参考:
#!/bin/bash

fruits=(
    "apple"
    "pear"
    "orange"
    "watermelon"
)

echo "Please guess which fruit I like :"
select var in ${fruits[@]}
do
    if [ $var = "apple" ]; then
        echo "Congratulations, you are my good firend!"
        break
    else
        echo "Try again!"
    fi
done



### 使用 `select` 创建交互式菜单 在 Shell 脚本中,`select` 循环提供了一种简便的方法来创建基于文本的菜单界面。通过此结构可以轻松实现用户友好的选项列表,并根据用户的输入执行相应的操作。 #### 基础语法展示 下面是一个简单的例子,展示了如何定义一个基本的选择菜单: ```bash #!/bin/bash echo "请选择您喜欢的颜色:" PS3='请输入您的选择: ' # 设置提示符 options=("红色" "绿色" "蓝色" "退出") # 定义可选项目数组 select opt in "${options[@]}"; do case $opt in "红色") echo "选择了红色" ;; "绿色") echo "选择了绿色" ;; "蓝色") echo "选择了蓝色" ;; "退出") break ;; *) echo "无效选项 $REPLY" ;; esac done ``` 这段代码会打印出颜色列表供用户挑选;当用户键入对应编号后回车确认,则触发相应分支下的指令[^1]。 #### 复杂应用实例 对于更复杂的应用场景,比如管理文件或配置服务状态等任务时,也可以利用 `select` 来简化流程控制逻辑。这里给出另一个稍微复杂的案例——遍历目录内的所有 .txt 文件并让用户决定要查看哪个文件的内容: ```bash #!/bin/bash shopt -s nullglob # 如果没有匹配项则返回空数组而不是星号本身 files=(*.txt) if [[ ${#files[@]} -eq 0 ]]; then echo "当前目录下没有任何 txt 文件." else PS3="请选择想要打开的文件 (按 Ctrl+C 取消): " select file in "${files[@]}" "取消"; do if [[ "$file" == "取消" ]]; then exit 0; elif [[ ! -z "$file" && -f "$file" ]];then less "$file" break else echo "未知选项 '$file'" fi done fi ``` 上述脚本首先检查是否存在 `.txt` 结尾的文件,如果有就列出它们作为选项让使用者浏览具体内容;如果不存在这样的文件就会告知用户并结束程序运行[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值