如何在Bash脚本中结合变量使用case语句处理用户输入?
Bash脚本实现方案
完整可运行代码如下:
#!/bin/bash minus="-" plus="+" log_file="./operation_log.csv" # 可自行修改日志文件路径 # 循环读取符号输入,非指定按键自动重提 while true; do echo -e "\n请选择操作类型:\n按 * 取出物品(记录负数)\n按 # 归还物品(记录正数)" read -r -n1 choice # -n1表示读取1个字符即结束输入,适配实体密码键盘免回车的交互特性 echo # 输入后自动换行,优化输出展示 case "$choice" in '*') sign="$minus" break ;; '#') sign="$plus" break ;; *) echo "输入错误,请仅按 * 或 # 键" ;; esac done # 循环读取数量,校验为正整数 while true; do echo "请输入操作数量:" read -r quantity # 正则校验输入为纯数字 if [[ "$quantity" =~ ^[0-9]+$ ]]; then break else echo "输入无效,请输入0-9的正整数" fi done # 拼接带符号的最终数量变量 signed_quantity="$sign$quantity" echo "本次记录数量:$signed_quantity" # 示例:写入csv日志,格式为 操作时间,操作数量 echo "$(date '+%Y-%m-%d %H:%M:%S'),$signed_quantity" >> "$log_file"
逻辑说明
- 符号校验:通过死循环+case分支判断,仅当用户输入
*/#时才进入下一步,其余输入直接提示错误并重输,符合需求的错误输入忽略规则。如果不需要适配密码键盘的单键触发,要用户输入后按回车确认,删除read参数中的-n1即可。 - 数量校验:新增了纯数字正则校验,避免非数字输入导致csv日志格式异常,可根据实际需求调整校验规则。
- 结果输出:最终带符号的数量存储在
$signed_quantity变量中,可直接调用该变量写入你需要的csv对应字段。
内容的提问来源于stack exchange,提问作者lane17
相关产品推荐
相关产品推荐

