shift位置偏移命令,用于对参数的偏移(左移)
- #!/bin/bash
- #
- if ! [ $# = 0 ];then
- echo "未加shift命令偏移."
- for i in `seq 1 $#`;do
- echo "第一个参数为: $1 参数个数为: $#"
- done
- else
- echo "没有参数."
- fi
- if ! [ $# = 0 ];then
- echo "加shift命令偏移."
- for j in `seq 1 $#`;do
- echo "第一个参数为: $1 参数个数为: $#"
- shift
- done
- else
- echo "没有参数."
- fi
执行结果
getopts是shell的内部命令,用来获取与分析命令行参数
- #/bin/bash
- #
- echo $0
- echo $*
- while getopts ":a:bc" opt
- do
- case $opt in
- a)
- echo $OPTARG
- echo $OPTIND;;
- b)
- echo "b $OPTIND";;
- c)
- echo "c $OPTIND";;
- ?)
- echo "error"
- exit 1;;
- esac
- done
- echo $OPTIND
- echo $*
- shift $(($OPTIND-1))
- echo $(($OPTIND-1))
- echo $*
- echo $0
执行结果
1、$0在用sh 或者 ./执行脚本时,指的是脚本名
2、$1 (1....n)指的第一个参数到....第n个参数
3、OPTARG存储相应选项的参数, OPTIND指向的是下一个参数的index
4、shift 会改变参数的顺序,通过左移去掉某些参数
5、getopts检测到非法参数就会停止,比如上例中遇到song就会终止,并不会去检测-m了,只要前一个参数是合法的(包含在option_string中的),就会继续检测下一个参数。