shell 小脚本
1 #! /bin/bash 2 3 j=0 4 for i in "$@" 5 do 6 j=$(( $j + 1)) #累加计算 7 echo -e "$j \c" 8 echo $i 9 done 10 11 12 while [[ $1 = -* ]]; do #匹配-后带任意值 13 case $1 in 14 -d) DEBUG=1 ;; 15 esac 16 shift 17 done 18 ACTION=$1 19 shift
$@ : 参数本身的列表,不包括命令本身
$* : 和$@相同,但"$*" 和 "$@"(加引号)并不同,"$*"将所有的参数解释成一个字符串,而"$@"是一个参数数组
摘抄一个: https://blog.linuxeye.com/389.html
1 !/bin/bash 2 3 #-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项 4 #如-carg 而不能是-c arg 5 #--long表示长选项 6 #"$@"在上面解释过 7 # -n:出错时的信息 8 # -- :举一个例子比较好理解: 9 #我们要创建一个名字为 "-f"的目录你会怎么办? 10 # mkdir -f #不成功,因为-f会被mkdir当作选项来解析,这时就可以使用 11 # mkdir -- -f 这样-f就不会被作为选项。 12 13 TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \ 14 -n 'example.bash' -- "$@"` 15 16 if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi 17 18 # Note the quotes around `$TEMP': they are essential! 19 #set 会重新排列参数的顺序,也就是改变$1,$2...$n的值,这些值在getopt中重新排列过了 20 eval set -- "$TEMP" 21 22 #经过getopt的处理,下面处理具体选项。 23 24 while true ; do 25 case "$1" in 26 -a|--a-long) echo "Option a" ; shift ;; 27 -b|--b-long) echo "Option b, argument \`$2'" ; shift 2 ;; 28 -c|--c-long) 29 # c has an optional argument. As we are in quoted mode, 30 # an empty parameter will be generated if its optional 31 # argument is not found. 32 case "$2" in 33 "") echo "Option c, no argument"; shift 2 ;; 34 *) echo "Option c, argument \`$2'" ; shift 2 ;; 35 esac ;; 36 --) shift ; break ;; 37 *) echo "Internal error!" ; exit 1 ;; 38 esac 39 done 40 echo "Remaining arguments:" 41 for arg do 42 echo '--> '"\`$arg'" ; 43 done