Shell中带$的特殊变量及对位置参数循环

特殊变量列表

$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如第一个参数是$1,第二个参数是$2
   当参数个数大于9时,用${n}表示,例如${10}表示第10个参数,如果写成$10则表示第一个参数,后边跟一个0;
$# 传递给脚本或函数的参数个数。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前shell进程ID.对于shell脚本,就是这些脚本所在的进程ID
$* 传递给脚本或函数的所有参数。$*被双引号包含时,"$*"会将所有的参数作为一个整体,也就是说函数认为是一个参数。
$@ 传递给脚本或函数的所有参数。将各个参数分开,以"$1" "$2" ... "$n" 的形式输出所有参数。详见下列例子。

 

"${@}"、${@}、"${*}"、${*}的区别

shell脚本

#!/bin/bash
func ()
{
    echo " length: ${#}"
    n=1
    while ((n<=${#}))
    do
        echo ${!n}
        ((n++))
    done
}
echo -n '"${@}"'
func "${@}"
echo -n '"${*}"'
func "${*}"
echo -n '${@}'
func ${@}
echo -n '${*}'
func ${*}

运行结果:例如"${*}" length: 1,函数认为"${*}"是一个参数

[root@iZ2zehhv8p7sdfow4xil5yZ positionalparameter]# ./indirectreference.sh -a are
"${@}" length: 2
-a
are
"${*}" length: 1
-a are
${@} length: 2
-a
are
${*} length: 2
-a
are

 

shell中对位置参数循环

引用于https://blog.csdn.net/m0_37886429/article/details/89280852

一、while+shift

#!/bin/bash
while (($#>0))
do
    echo $1
    shift
done

二、for循环 # "$@"表示参数列表

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

三、间接引用 ${!i}

#!/bin/bash
i=1
while ((i<=$#))
do
    echo ${!i}
    ((i++))
done

四、简介变量引用

#!/bin/bash
i=1
while ((i<=$#))
do
    eval parameter=\$$i
    echo ${parameter}
    let i++
done

 

Linux中Shell自定义可指定参数名和参数值
脚本如下:

#!/bin/bash
func ()
{
    while getopts "a:b:c:" arg
    do
        case "$arg" in
            a)
                echo "-a all value $OPTARG"
                ;;
            b)
                echo "-b  value $OPTARG"
                ;;
            c)
                echo "-c value$OPTARG"
                ;;
            ?)
                echo " invalid option"
                exit 1
                ;;
        esac
    done
}
func "${@}"

输出结果如下:

[root@iZ2zehhv8p7sdfow4xil5yZ hyang]# ./test1.sh -a are -b you
-a all value are
-b  value you

 

posted @ 2022-10-10 15:12  panda4671  阅读(230)  评论(0编辑  收藏  举报