shell脚本选项参数处理学习getopts|getopt

本文介绍了在Bash脚本中处理命令行参数的三种常见方法:手动处理、使用getopts及getopt工具。每种方法都有其适用场景,通过示例展示了具体的实现方式。

       在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景。

  • 手工处理方式
  • getopts
  • getopt

(1)手动处理方式

#!/bin/bash 
for arg in "$@"
do
	echo $arg
done

(2)getopts

#!/bin/bash

while getopts "a:bc" arg #选项后面的冒号表示该选项需要参数
do
        case $arg in
             a)
                echo "a's arg:$OPTARG" #参数存在$OPTARG中
                ;;
             b)
                echo "b"
                ;;
             c)
                echo "c"
                ;;
             ?)  #当有不认识的选项的时候arg为?
                echo "unkonw argument"
                exit 1
                ;;
        esac
done
上面test.sh脚本就可以./test.sh -a arg -bc来执行了

(3)getopt

未完待续》》》

### Shell脚本中如何处理命令行选项参数 Shell脚本处理命令行选项参数的方式通常依赖于位置参数和一些内置或外部命令。以下是几种常见的处理方法: #### 使用位置参数和`shift`手动解析 在 Shell 脚本中,可以直接通过 `$1`, `$2`, `$3` 等访问命令行参数,然后使用 `shift` 命令依次移动参数位置。这种方法适用于参数较少、格式固定的场景: ```bash #!/bin/bash count=1 while [ -n "$1" ]; do echo "parameter #$count: $1" count=$((count + 1)) shift done ``` 此方法虽然简单,但处理复杂命令行结构(如可选参数、混合选项参数)时较为繁琐[^3]。 #### 使用`getopts`处理选项 `getopts` 是 Bash 内置的命令,专门用于解析命令行中的短选项(如 `-a`, `-b value`)。它支持选项参数可选性,并可以处理多个选项的组合: ```bash #!/bin/bash while getopts "a:b:c" opt; do case $opt in a) echo "Option -a with value: $OPTARG" ;; b) echo "Option -b with value: $OPTARG" ;; c) echo "Option -c" ;; \?) echo "Invalid option: -$OPTARG" ;; :) echo "Option -$OPTARG requires an argument." ;; esac done ``` 此方法适用于处理简单的短选项,但不支持长选项(如 `--verbose`)。 #### 使用`getopt`处理选项和复杂参数 如果需要处理选项、可选参数以及更复杂的命令行结构,可以使用 `getopt` 命令。`getopt` 是一个外部工具,支持 GNU 扩展,能够处理选项和长选项混合的情况: ```bash #!/bin/bash TEMP=$(getopt -o ab:c:: --long alpha,bravo:,charlie:: \ -n 'error' -- "$@") if [ $? != 0 ]; then exit 1 fi eval set -- "$TEMP" while true; do case "$1" in -a|--alpha) echo "Alpha mode" shift ;; -b|--bravo) echo "Bravo with $2" shift 2 ;; -c|--charlie) case "$2" in "") echo "Charlie (default)" shift 2 ;; *) echo "Charlie with $2" shift 2 ;; esac ;; --) shift break ;; *) echo "Internal error" exit 1 ;; esac done ``` `getopt` 的优势在于它能够更好地处理复杂的命令行结构,例如长选项、可选参数以及参数顺序无关性[^5]。 #### 混合使用位置参数选项 在某些情况下,可能需要同时处理命令行选项和非选项参数(如文件名或操作目标)。可以先使用 `getopts` 或 `getopt` 解析完所有选项后,再处理剩余的参数: ```bash #!/bin/bash while getopts "v" opt; do case $opt in v) echo "Verbose mode enabled" ;; esac done shift $((OPTIND - 1)) echo "Remaining arguments: $@" ``` 这种方式可以确保选项和非选项参数都能被正确处理[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值