shell传递参数
我们可以在执行shell脚本时,向脚本传递参数。
$n n代表数字。0表示执行的脚本名称,1表示第1个参数,2是第2个参数
$# 传递到脚本的参数个数
$$ 脚本运行的当前进程的ID号
$! 后台运行的最后一个进程的ID号
$? 显示上个命令的执行情况。0表示没有错误,其他任何值表明有错误。
$@ 一个单字符显示所有向脚本传递的参数,需要加引号
$* 以一个单字符显示所有向脚本传递的参数
$- 显示shell使用的当前选项,与set命令功能相同
#shell
#!/bin/sh
echo "shell脚本名称:" $0
echo "第一个参数:" $1
echo "第二个参数:" $2
echo "脚本的个数:" $#
echo "当前进程ID:" $$
echo "后台运行的最后一个进程ID:" $!
echo "上个命令的执行结果:" $?
echo "参数作为字符串显示*:" $* "$*"
echo "参数作为字符串显示@:" $@ "$@"
shell脚本名称: 829test.sh
第一个参数: 3
第二个参数: 4
脚本的个数: 2
当前进程ID: 6673
后台运行的最后一个进程ID:
上个命令的执行结果: 0
参数作为字符串显示: 3 4 3 4
参数作为字符串显示@: 3 4 3 4*
$@与$区别
相同点:都是引用参数
不同点:只有在双引号中体现出来。$会将所有的参数作为一个字符串
#shell
#!/bin/sh
echo "--\$@演示--"
for i in $@;do
echo $i
done
echo "--\$*演示--"
for i in $*;do
echo $i
done
echo "--\"\$@\"演示--"
for i in "$@";do
echo $i
done
echo "--\"\$*\"演示--"
for i in "$*";do
echo $i
done
--$@演示--
3
4
--$演示--
3
4
--"$@"演示--
3
4
--"$"演示--
3 4
注意
shell脚本中传递的参数如果包含空格,应该对该参数使用单引号或者双引号。
#shell
#!/bin/sh
echo "传入一个参数‘Tom Cat’"
echo "第一个参数:$1"
echo "参数个数$#"
csjdeMacBook-Air:shell csj$ sh 829test.sh Tom Cat
传入一个参数‘Tom Cat’
第一个参数:Tom
参数个数2
csjdeMacBook-Air:shell csj$ sh 829test.sh "Tom Cat"
传入一个参数‘Tom Cat’
第一个参数:Tom Cat
参数个数1