shell 5参数

1. shell传递参数

我们可以在执行shell脚本时,向脚本传递参数。

$nn代表数字。$0表示执行的脚本名称,$1表示第1个参数,$2是第2个参数.
shell默认支持9个参数,使用shift可以传递更多的参数。
$#,${#*},${#@} 传递到脚本的参数个数
$$脚本运行的当前进程的ID号
$!后台运行的最后一个进程的ID号
$? 显示上个命令的执行情况。0表示没有错误,其他任何值表明有错误。
$@一个单字符显示所有向脚本传递的参数
$*以一个单字符显示所有向脚本传递的参数
$-显示shell使用的当前选项,与set命令功能相同
${*:1:3},${*:$#}表示多个参数
``` #shell #!/bin/sh echo "shell脚本名称:" $0 #shell脚本名称: 829test.sh echo "第一个参数:" $1 #第一个参数: 3 echo "第二个参数:" $2 #第二个参数: 4 echo "脚本的个数:" $# #脚本的个数: 2 echo "当前进程ID:" $$ #当前进程ID: 6673 echo "后台运行的最后一个进程ID:" $! #后台运行的最后一个进程ID: echo "上个命令的执行结果:" $? #上个命令的执行结果: 0 echo "参数作为字符串显示*:" $* "$*" #参数作为字符串显示*: 3 4 3 4 echo "参数作为字符串显示@:" $@ "$@" #参数作为字符串显示@: 3 4 3 4 ```

2. \(@与\)*区别

#!/bin/sh
#$@ vs $* 

func1(){
	echo \"\$@\"
	for d in "$@";do
		echo $d
	done
}
func1 1 2 '3 4' '"5 6" 7'

func2(){
	echo \$@
	for d in $@;do
		echo $d
	done
}
func2 1 2 '3 4' '"5 6" 7'

func3(){
	echo \"\$*\"
	for d in "$*";do
		echo $d
	done
}
func3 1 2 '3 4' '"5 6" 7'

func4(){
	echo \$*
	for d in $*;do
		echo $d
	done
}
func4 1 2 '3 4' '"5 6" 7'
1 2 '3 4' '"5 6" 7' $* $@
没有双引号
$*和$@一样,都是按空格分隔打印参数
1
2
3
4
"5
6"
7
1
2
3
4
"5
6"
7
双引号
"$*"一行打印全部参数
"$@"挨个输出参数
1 2 3 4 "5 6" 7 1
2
3 4
"5 6" 7
# 3. 注意 shell脚本中传递的参数如果包含空格,应该对该参数使用单引号或者双引号。
脚本参数:Tom Cat参数:"Tom Cat"
#!/bin/sh
echo "传入参数:$*"
echo "第一个参数:$1"
echo "参数个数:$#"

传入参数:Tom Cat
第一个参数:Tom
参数个数:2

传入参数:Tom Cat
第一个参数:Tom Cat
参数个数:1
posted on 2018-08-29 10:29  singleSpace  阅读(198)  评论(0编辑  收藏  举报