我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为 $n,n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数。
例如可以使用 $1、$2 等来引用传递给脚本的参数,其中 $1 表示第一个参数,$2 表示第二个参数,依此类推。
实例
以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):
为脚本设置可执行权限,并执行脚本,输出结果如下所示:
$ chmod +x test.sh $ ./test.sh 1 2 3 Shell 传递参数实例! 执行的文件名:./test.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3
另外,还有几个特殊字符用来处理参数:
执行脚本,输出结果如下所示:
$ chmod +x test.sh $ ./test.sh 1 2 3 Shell 传递参数实例! 第一个参数为:1 参数个数为:3 传递的参数作为一个字符串显示:1 2 3
$* 与 $@ 区别:
$ chmod +x test.sh $ ./test.sh 1 2 3 -- $* 演示 --- 1 2 3 -- $@ 演示 --- 1 2 3
3 篇笔记
在为shell脚本传递的参数中如果包含空格,应该使用单引号或者双引号将该参数括起来,以便于脚本将这个参数作为整体来接收。
在有参数时,可以使用对参数进行校验的方式处理以减少错误发生:
if [ -n "$1" ]; then echo "包含第一个参数" else echo "没有包含第一参数" fi
注意:中括号 [] 与其中间的代码应该有空格隔开
Shell 里面的中括号(包括单中括号与双中括号)可用于一些条件的测试:
[] 常常可以使用 test 命令来代替,具体可参看:Shell 中的中括号用法总结。
含有空格的参数,只需要在参数传递的时候加双引号就可以。
#!/bin/bash echo "---------------with double quote ---------------" echo "$1" echo "$2" echo "$3" my_procedure() { echo "$1" echo "$2" echo "$3" } my_procedure "$@" echo "---------------withtout double quote ---------------" echo $1 echo $2 echo $3 my_procedure() { echo $1 echo $2 echo $3 } my_procedure "$@" echo "---------------withtout double quote by passing arguments---------------" my_procedure $@
输入:
./test.sh "a b" "c d" "e f"
输出结果为:
---------------with double quote --------------- a b c d e f g a b c d e f g ---------------withtout double quote --------------- a b c d e f g a b c d e f g ---------------withtout double quote by passing arguments --------------- a b c
前两部分无论在函数内外,加不加引号都一样,但是在函数传递的时候要保证加引号。