我有一个bash脚本,它将采用一个参数:产品ID.产品ID可以采用以下两种格式之一:所有数字,或字母,数字和下划线的混合.根据输入的ID类型,脚本将以稍微不同的方式处理它.
现在,我正在使用getopts每个子类型的一个标志来区分我将在脚本中使用哪种类型的产品ID.例如:
./myscript -n 1034596
要么
./myscript -v AB_ABCD_12345
使用简化版本的脚本如下所示:
#!/bin/bash
while getopts ":n:v:" opt; do
case $opt in
n)
echo "This is a numbers only ID." >&2
;;
v)
echo "This is a letters, numbers, underscore ID" >&2
;;
esac
done
Run Code Online (Sandbox Code Playgroud)
由于格式是静态的,也就是说,第一种类型的ID永远不会是数字,有没有办法自动区分这两种类型的ID并适当地处理它们而不需要-n或-v标志?所以,我可以进入./myscript 1034596,脚本将知道,因为参数只包含数字,它应该以特定的方式处理它.
#!/bin/bash
shopt -s extglob
case "$1" in
+([0-9]) ) echo "This is a numbers only ID." >&2
;;
+([a-zA-Z0-9_]) ) echo "This is a letters, numbers, underscore ID" >&2
;;
*) echo "Unrecognized Product ID" >&2
esac
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3497 次 |
| 最近记录: |