前言
- 在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
代码示例
- 加执行权限 :chmod +x test.sh
- 执行:./test.sh 1 2 3
1. #!/bin/bash 2. # 保存为test.sh 3. echo "Shell 传递参数实例!"; 4. echo "执行的文件名:$0"; 5. echo "第一个参数为:$1"; 6. echo "第二个参数为:$2"; 7. echo "第三个参数为:$3"; 8. 9. #输出 10. #Shell 传递参数实例! 11. #执行的文件名:test.sh 12. #第一个参数为:1 13. #第二个参数为:2 14. #第三个参数为:3
其他参数处理说明
参数处理 | 说明 |
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
1. echo "Shell 传递参数实例!"; 2. echo "执行的文件名:$0"; 3. echo "第一个参数为:$1"; 4. echo "第二个参数为:$2"; 5. echo "第三个参数为:$3"; 6. echo "参数个数为:$#" 7. echo 参数为:$* 8. echo 参数为:$@ 9. echo 进程号:$$ 10. echo 最后一个命令退出状态:$? 11. echo 最后一个进程号:$! 12. echo $-
$* 与 $@ 区别
- 相同点:都是引用所有参数。
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
1. #!/bin/bash 2. 3. echo "-- \$* 演示 ---" 4. for i in "$*"; do 5. echo $i 6. done 7. 8. echo "-- \$@ 演示 ---" 9. for i in "$@"; do 10. echo $i 11. done