Shell 传递引数
我们可以在执行 Shell 指令码时,向指令码传递引数,指令码内获取引数的格式为:$n 。 n 代表一个数字,1 为执行指令码的第一个引数,2 为执行指令码的第二个引数,以此类推……
例项
以下例项我们向指令码传递三个引数,并分别输出,其中 $0 为执行的档名:
#!/bin/bash
# author: 菜鸟教程
# url:www.runoob.com
echo “Shell 传递引数例项!”;
echo “ 执行的档名:$0”;
echo “ 第一个引数为:$1”;
echo “ 第二个引数为:$2”;
echo “ 第三个引数为:$3”;
为指令码设定可执行许可权,并执行指令码,输出结果如下所示:
$ chmod +x test.sh
$ ./test.sh 1 2 3
Shell 传递引数例项!
执行的档名:./test.sh
第一个引数为:1
第二个引数为:2
第三个引数为:3
另外,还有几个特殊字元用来处理引数:
引数处理
说明
$#
传递到指令码的引数个数
$*
以一个单字串显示所有向指令码传递的引数。
如”$*” 用「”」括起来的情况、以”$1 $2 … $n” 的形式输出所有引数。
$$
指令码执行的当前程序 ID 号
$!
后台执行的最后一个程序的 ID 号
$@
与 $*相同,但是使用时加引号,并在引号中返回每个引数。
如”$@” 用「”」括起来的情况、以”$1″ “$2” … “$n” 的形式输出所有引数。
$-
显示 Shell 使用的当前选项,与 set 命令功能相同。
$?
显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。
#!/bin/bash
# author: 菜鸟教程
# url:www.runoob.com
echo “Shell 传递引数例项!”;
echo “ 第一个引数为:$1”;
echo “ 引数个数为:$#”;
echo “ 传递的引数作为一个字串显示:$*”;
执行指令码,输出结果如下所示:
$ chmod +x test.sh
$ ./test.sh 1 2 3
Shell 传递引数例项!
第一个引数为:1
引数个数为:3
传递的引数作为一个字串显示:1 2 3
$* 与 $@ 区别:
相同点:都是引用所有引数。
不同点:只有在双引号中体现出来。假设在指令码执行时写了三个引数 1 、 2 、 3,,则 ” * ” 等价于 “1 2 3″(传递了一个引数),而 “@” 等价于 “1” “2” “3”(传递了三个引数)。
#!/bin/bash
# author: 菜鸟教程
# url:www.runoob.com
echo “– $* 演示 —”
for i in “$*”; do
echo $i
done
echo “– $@ 演示 —”
for i in “$@”; do
echo $i
done
执行指令码,输出结果如下所示:
$ chmod +x test.sh
$ ./test.sh 1 2 3
— $* 演示 —
1 2 3
— $@ 演示 —
1
2
3