Linux脚本:Bash脚本看这一篇就够了-CSDN博客
脚本传参:
./my_script.sh arg1 arg2 arg3
使用以下几个变量进行处理:
$0 #即命令本身(my_script.sh),相当于c/c++中的argv[0];
$1 #第一个参数(arg1),$2, $3, $4 ... #第2、3、4个参数,依次类推;
$# #参数的个数,不包括命令本身,上述例子$# = 3;
$@ #参数本身的列表,不包括命令本身;
$* #和$@相同,但"$*"和"$@"(加引号)并不同,
#"$*"将所有的参数解释成一个字符串,而"$@"是一个参数数组
(1)脚本传参的个数:
-
"$#"
用于表示传递给脚本的**位置参数(positional arguments)**的数量。
位置参数是指在命令行中直接跟随脚本名称的参数。仅计算位置参数,不包括脚本名称本身。例如,./script.sh
中的 script.sh
不算作参数。
if [ "$#" -lt 4 ]; thenxxx
elsexxx
fi
(2)长选项、短选项
$ command [option] [paraments]
对于选项(option)类型有两种:
1)短选项(short option):由一个连字符和一个字母构成,例如:-a, -s等;
2)长选项(long options):由两个连字符和一些大小写字母组合的单词构成,例如:--size,--help等。
短选项:-n -m 也算是参数。
./arg_info.sh -n 1 -m 2arg1 -n
arg2 1
arg3 -m
arg4 2
arg_num =4
(3)改变参数索引:shift
在 Bash 脚本中,shift
是一个内置命令,用于操作脚本的位置参数($1
、$2
、$3
等)。它的主要功能是将位置参数向左移动(即“移位”),从而改变参数的索引位置。这在处理命令行参数时非常有用,尤其是在循环中逐个处理参数时。
-
每次执行
shift
命令时,位置参数$1
会被丢弃,其他参数的索引会依次向前移动。 -
./my_script.sh -n 1 -m 2 -s 3 while [ -n "$1" ] #检查参数1是否为空docase "$1" in #根据当前参数1的值匹配不同的选项,并执行相应的逻辑-n) xxxshift;; -m)xxxshift;;*) xxxesacshiftdone
-
./script.sh a b c d
在脚本中,位置参数的初始状态如下:
-
$1 = a
-
$2 = b
-
$3 = c
-
$4 = d
-
shift
执行shift指令后,
参数的索引会向前移动一位: -
$1 = b
-
$2 = c
-
$3 = d
-
$4
不再存在(被丢弃) -
再次执行shift指令后,
-
$1 = c
-
$2 = d
-
$3
不再存在(被丢弃)