位置变量:

        $0: 获取当前执行shell的文件名称,如果执行脚本带路径那么就包括脚本路径

        $n:  获取当前执行的shell脚本的第ng参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9,大括号括起来${10}.

     

                    [root@linux-node1 ~]# vim q.sh 
                    echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}


                    输出的结果

                    [root@linux-node1 ~]# sh q.sh {a..z}
                    a b c d e f g h i j k l m n o


        $*:  将所有的命令行所有参数视为单个字符串,等同于 “$1$2$3”,"$*"

        $@: 将命令行每个参数视为单独的字符串,等同于“$!”"$2" "$2"这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白

           注意:上述区别仅限在于加双引号的时候,即“$*”与“$@”

          [root@linux-node1 ~]# set -- "I am" from HuNan

                [root@linux-node1 ~]# echo $#

                3


          

                [root@linux-node1 ~]# for i in "$*";do echo $i;done  有双引号的情况下,当做一个参数输出
                I am from HuNan
                [root@linux-node1 ~]# for i in "$@";do echo $i;done  有双引号的情况下,独立输出
                I am
                from
                HuNan

         例 :

                [root@linux-node1 ~]# for i;do echo $i;done  去掉in变量列表,相当于in “$@”

                I am


                from


                HuNan

                  

          例:

                [root@linux-node1 ~]# for i in $*;do echo $i;done   不加双引号,把所有参数输出,然后第一个参数“I am”也拆开了

                I
                am
            from
            HuNan



        $?: 获取执行上一个指令的返回值(0 为成功,非零为失败) 这个变量很常用

                       例:

                            echo $?

    

        $#:获取当前执行的shell脚本后面的参数总个数。


           企业案 例控制用户传参个数

                   [root@linux-node1 ~]# vim q1.sh

                    [ $# -ne 2 ] && {
                    echo "pls input two number"
                    exit 1                   ---->赋值给当前的shell的$?变量了。

                       }
                    echo "Thanks!"