You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:15:03