很多时候shell脚本的执行时需要向其传递参数,脚本执行中获取参数格式是 $n,n为自然数,从1开始,几就是第几个参数。
#!/bin/bash
#author:atong
#version:test1
echo "我们来看例子!!"
echo "$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
$0就是打印shell脚本文件名
输出结果
# sh parameter_passing.sh w e r
我们来看例子!!
parameter_passing.sh
第一个参数:w
第二个参数:e
第三个参数:r
我们在后面会在编写脚本时,遇到很多常用、特殊、必记的参数:
参数 | 作用 |
$# | 统计传递到脚本的参数个数 |
$* | 以字符串的形式输出传递的所有参数 |
$$ | 脚本运行当前进程ID号 |
$@ | 和$*相同,但使用时加引号,并在引号中返回每个参数 |
$! | 后台运行的最后一个进程ID号 |
$- | 显示shell使用的当前选项,与set命令功能相同 |
$? | 显示最后命令的退出状态。0表示无误,其余值都表明有错误。 |
例
#!/bin/bash
#author:atong
#version:test1
echo "我们来看例子!!"
echo "$0"
echo "第一个参数:$1"
echo "传参的个数:$#"
echo "所有参数字符串输出:$*"
sh parameter_passing.sh w e r
我们来看例子!!
parameter_passing.sh
第一个参数:w
传参的个数:3
所有参数字符串输出:w e r
$*和$@
同:都会引用到传递的参数
异:$*是把所有参数看作一个参数,$@是看作分开的独立参数
#!/bin/bash
#author:atong
#version:test1
echo "------\$* 效果------"
for i in "$*";do
echo $i
done
echo "------\$@ 效果------"
for i in "$@";do
echo $i
done
输出效果
sh parameter_tt.sh 1 3 5
------$* 效果------
1 3 5
------$@ 效果------
1
3
5
在shell脚本传参时,参数中若包含空格,应该使用单引号或双引号将该参数括起来,以便脚本将此参数作为整体接收。
在有参数时,可使用对参数进行校验的方式处理以减少不必要的错误。
if [ -n "$1" ];then
echo "包含第一个参数"
else
echo "未包含第一个参数"
fi
[ ]中与代码内容用空格隔开,以便让脚本区分。