shell传入参数shift、eval、$@、$*使用方法

shift:位置参数,shift默认是shift 1

Bash 定义了9个位置变量,从 $1 到 $9,这并不意味着用户在命令行只能使用9个参数,借助 shift 命令可以访问多于9个的参数。Shift 命令一次移动参数的个数由其所带的参数指定。例如当 shell 程序处理完前九个命令行参数后,可以使用 shift 9 命令把 $10 移到 $1。

shift介绍:http://www.jb51.net/article/40260.htm


eval:重新运算求出参数的内容,eval可读取一连串的参数,然后再依参数本身的特性来执行,参数不限数目,彼此之间用分号分开
shift和eval处理的速度差别不大。

https://www.cnblogs.com/f-ck-need-u/p/7426371.html

http://blog.51cto.com/363918/1341977

http://blog.csdn.net/damotiansheng/article/details/39735441


$#:传入参数的总个数

$@ $*:当前所有的传入参数:

$@ :原样保存了参数列表

$*:保存了以$IFS指定的分割符所分割的字符串组

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。  但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
例子:第一个参数为主机名,其余参数为docker容器ip ,查询物理机上所有docker容器的信息,如输入 sh qcid.sh 520 10.xx 10.33.xx ...

#!/bin/bash
qcid -h xxx-docker$1.bj |cut -d, -f1 >c$1
if [ -f "c$1" ];then
    echo -e "c$1已创建!"
    cat c$1;
else
    exit
fi
echo
qcid -h xxx-docker$1.bj|cut -d, -f2 > tmp && qcron -f tmp |grep has
echo
if [ $# -ge 2 ];then
    shift;
    for i in "$@";do
        ./qtree $i | xargs echo "$i "
   done
#    for (( i=2; i<=$#; i++ ));do
#        eval j=\$i
#        ./qtree $j | xargs echo "$j "
#    done
else
    echo "no container"
fi

anzhihe安志合个人博客,版权所有丨 如未注明,均为原创 丨转载请注明转自:https://chegva.com/2752.html | ☆★★每天进步一点点,加油!★★☆

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注