【Linux】命令行选项和参数处理
Linux下的Shell命令行选项和参数的处理一般可以用getopt、getopts和while-case等方式处理。
简单的while加case
一般选项和参数定义通常是-v后面接一个版本的参数以及-v后面不接参数两种
参考代码
cat parse_args.sh
#!/bin/bash export VERSION="" export PPT="NO" parse_args(){ echo "start parse_args" while [ -n "$1" ] do case "$1" in -v) shift if [ -n "$1" ];then export VERSION="$1" else echo "ERROR:VERSION is empty" exit 1 fi shift ;; -p) export PPT="YES" shift ;; *) echo "wrong args:$*" exit 1 ;; esac done } parse_args $@ echo $VERSION echo $PPT
上述echo格式可以参考另外一篇博文进行标准化输出
https://blog.csdn.net/Sudley/article/details/93914507
上述代码要点介绍:
shift:参数进行左移,$2移到$1,也可加数字shift 2表示参数左移两位$3移到$1。
∗和*和∗和@的区别:
“∗"会把所有位置参数当成一个整体(或者说当成一个单词),如果没有位置参数,则"*" 会把所有位置参数当成一个整体(或者说当成一个单词),如果没有位置参数,则"∗"会把所有位置参数当成一个整体(或者说当成一个单词),如果没有位置参数,则"“为空,如果有两个位置参数并且IFS为空格时,”$“相当于”$1 2"。"2"。
"2"。"@” 会把所有位置参数当成一个单独的字段,如果没有位置参数(KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲为0),则"@“展开为空(不是空字符串,而是空列表),如果存在一个位置参数,则”$@“相当于”1",如果有两个参数,则"1",如果有两个参数,则"1",如果有两个参数,则"@“相当于”$1" "2"等等。一般可以通过用for循环展开2"等等。
一般可以通过用for循环展开2"等等。一般可以通过用for循环展开*和$@参数来对比他们之间的区别
[root@localhost /home/Sudley]#cat test.sh #!/bin/bash for i in "$*" do echo $i done echo "############################" for i in "$@" do echo $i done [root@localhost /home/Sudley]#sh test.sh a b c a b c ############################ a b c
while、case组合的选项参数处理优缺点
优点:简单粗暴,用我们已知的while循环和case分支就可以实现选项处理。
缺点:选项出错不感知,比如上述代码我们期待的输入应该是./parse_args.sh -v 2019 -p,但是当输入./parse_args.sh -v -p时也不会出错,此时-p就赋值给了VERSION变量。这样需要通过其他方式来检查我们的参数输入是否符合要求。
getopts
比较直观,一眼看到支持哪些选项,选项后面接:代表需要接参数,参数保存在$OPTARG变量中。
#!/bin/bash echo $@ |\ while getopts 'a:bcd:e' OPT do case $OPT in a) echo $OPTARG ;; b) echo "b" ;; c) echo "c" ;; d) dd="$OPTARG" echo $dd ;; e) echo "end" ;; ?) echo "unknow option" exit 1 ;; esac done
- Bash Shell中命令行选项/参数处理
- 【视频】Linux高级程序设计01.3命令行选项及参数
- Bash Shell中命令行选项/参数处理
- main函数的参数:处理命令行选项
- getopt/getopts:Bash中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- getopt:命令行选项、参数处理
- Bash Shell中命令行选项/参数处理
- main函数参数分析 处理命令行选项
- getopt:命令行选项、参数处理
- bash shell命令行选项与修传入参数处理
- 脚本乐园 Shell中命令行选项和参数的处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- 【转】Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理