leocll

.

Shell参数选项解析

两种shell选项参数解析工具

getopts/getopt

原理

  • test.sh
#!/bin/bash

while [[ $# -ge 1 ]]; do
	case $1 in
		-a|--aa )
			A=$2
			echo "经过a"
			shift 2
			;;
		-b|--bb )
			B=$2
			echo "经过b"
			shift 2
			;;
		-c|--cc )
			C="true"
			echo "经过c"
			shift
			;;
		* )
			echo "经过*:$1"
			shift	
			;;
	esac
done
echo "A = $A"
echo "B = $B"
echo "C = $C"
  • 执行:sh test.sh --bb bbb -c -d -a aaa
经过b
经过c
经过*:-d
经过a
A = aaa
B = bbb
C = true
  • $# -ge 1:参数个数大于等于1

  • case esac语句

    • ;;:与其他语言中的break,但是此时不能省略贯穿后面,语法报错
    • *)*表示通配符,相当于其他语言的default未匹配项
  • shfit:位置参数左移命令

    • 例子:shift 3表示原来的$4现在变成$1,原来的$5现在变成$2,原来的$1$2$3丢弃,$0不移动,$#参数个数会减3。
posted @ 2019-06-24 17:20  leocll  阅读(3899)  评论(0编辑  收藏  举报