Bash中提取特定参数后的数字并按场景存入对应变量的实现方法
Bash中提取特定参数后的数字并按场景存入对应变量的实现方法
嘿,这个需求完全可以实现!咱们用Bash的参数解析逻辑就能搞定,针对你说的三种输入场景分别处理,下面给你详细的实现思路和代码:
核心思路
我们通过遍历命令行参数,识别-a和-b标记,然后提取它们后面紧跟的数字。根据是否同时存在两个标记,决定把数字存入单个number变量,还是分开的number1和number2变量。
完整实现脚本
#!/bin/bash # 初始化变量,避免之前的残留值影响 number="" number1="" number2="" # 遍历所有命令行参数 while [[ $# -gt 0 ]]; do case "$1" in -a) # 可选:检查-a后面是否为有效数字,避免错误输入 if [[ ! "$2" =~ ^[0-9]+$ ]]; then echo "错误:-a 后面必须跟有效数字" >&2 exit 1 fi # 判断是否已经有-b对应的数字(即number已被赋值) if [[ -n "$number" ]]; then number1="$2" else number="$2" fi shift 2 # 跳过当前的-a和对应的数字 ;; -b) # 可选:检查-b后面是否为有效数字 if [[ ! "$2" =~ ^[0-9]+$ ]]; then echo "错误:-b 后面必须跟有效数字" >&2 exit 1 fi # 判断是否已经有-a对应的数字 if [[ -n "$number" ]]; then # 把之前的number转成number1,当前-b的数字存number2 number1="$number" number2="$2" number="" # 清空number避免混淆 else number="$2" fi shift 2 # 跳过当前的-b和对应的数字 ;; *) # 忽略其他无关参数(比如你例子里的末尾大数字) shift ;; esac done # 根据变量情况输出结果 if [[ -n "$number1" && -n "$number2" ]]; then echo "number1=$number1" echo "number2=$number2" elif [[ -n "$number" ]]; then echo "number=$number" fi
测试你的三个场景
把上面的代码保存为extract_numbers.sh,加执行权限chmod +x extract_numbers.sh,然后分别测试:
- 第一个场景(仅
-a):
./extract_numbers.sh -a 3 1245 1234
输出:
number=3
- 第二个场景(仅
-b):
./extract_numbers.sh -b 2 2345 64353
输出:
number=2
- 第三个场景(同时有
-a和-b):
./extract_numbers.sh -a 5 -b 3 54525 545252
输出:
number1=5 number2=3
额外说明
- 如果需要支持
-a和-b顺序颠倒的情况(比如-b 3 -a 5),这个脚本也能正常处理,会自动调整变量赋值逻辑。 - 脚本里的数字校验是可选的,如果你的输入一定是合法数字,可以去掉这部分简化代码。
备注:内容来源于stack exchange,提问作者newprogrammer pro
相关产品推荐
相关产品推荐

