shell中的特殊参数

shell中的特殊参数

1.位置参数

$ 变量名

#!/bin/bash
echo $1,$2

在这里插入图片描述
注意:
1.有两个$符只能接收两个参数,后面输入的不会被接收
2.如果用双引号括起来代表一个参数。例如:“hello nigar”

- 多个位置参数

脚本:

vim 2.sh
#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15

执行:
在这里插入图片描述
位置参数的数字大于9后,输出的内容就不对了。这是因为解释器把10当作1和0两个数字来看
当位置参数的数字大于9时:需要用花括号将数字括起来

改写后的脚本:

#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}

在这里插入图片描述

2.获取脚本的名称及路径

- $0获取

echo $0

在这里插入图片描述
用$0来获取时:
若不带路径执行脚本,那么输出结果就是脚本的名字;
若使用全路径执行脚本,那么输出结果或就是全路径加上脚本名

- 单独获取名称和路径

#!/bin/bash
dirname $0		#获取路径
basename $0		#获取脚本名

在这里插入图片描述
若不带路径执行脚本,输出的结果为".",代表当前路径
若带路径执行脚本,输出的结果为路径名

3.$#获取脚本传参的个数

#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9
echo $#		# $#获取脚本传参的个数

在这里插入图片描述
传递了a到z 26个参数,但是只接收了9个变量,所以打印9个字符

4.set设置位置参数

set -- 参数

在这里插入图片描述

5. $* 和$@的区别

$* 和$@都表示参数列表中所有的参数

#!/bin/bash
foo(){
	echo $*

}

bar(){
	echo $@

}

foo 1 2 3 4
bar 1 2 3 4

此处使用了shell中函数的设定,在下一篇中会详细介绍
在这里插入图片描述
输出没有任何区别,那么$* 和$@的区别到底是什么呢?
$* 和$@被双引号(" ")包含时,$*会将所有的参数作为一个整体输出,而$@会将参数分开输出

#!/bin/bash
test(){
	echo "未加引号,二者相同"
	echo $*
	echo $@
	echo "加入引号后对比"
	echo "-------"
	for N in "$*"
	do
		echo $N
	done

	echo "########"
	for N in "$@"
	do
		echo $N
	done

}

test 11 22 33

此处使用了shell中for循环语句,在下一篇中会详细介绍
在这里插入图片描述
由此可见:
$*输出的格式为"$1 $2 $3"
$@输出的格式为"$1" "$2" "$3"

6.shift用于参数的移动

shift命令用于对于参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理

#!/bin/bash

while [ $# != 0 ];do
echo "第一个参数为:$1,参数的个数为:$#"
shift
done

在这里插入图片描述
shift命令每执行一次,变量的个数($#)减1;之前的$1变量被销毁,之后的$2就变成了$1,而变量值提前一位

7.$?获取函数的返回值

当一个进程执行完毕时,该进程会提供一个退出码(一个整数)表明它准备退出的原因。按照惯例,0用来表明正常或者说“成功”的终止
也就是说我们在执行echo $?时返回的值就是进程的退出码,这个退出码是由刚刚执行完的进程提供给系统内核的

$?是一个特殊变量,同来获取上一个命令的退出状态,或者上一个函数的返回值。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下大部分命令执行成功会返回0,失败返回1,这和c语言中的main()函数是类似的

理解函数的返回值:
在这里插入图片描述
应用:判断参数是否正确

#!/bin/bash
if [ "$1" == 10 ] 
then
	exit 0  #参数正确 退出状态为0
else
	exit 1 #参数不正确 退出状态为1
fi

在这里插入图片描述
应用:$? 获取函数的返回值

#!/bin/bash
add(){
	return `expr $1 + $2`

}
add 20 100    #调用函数
echo $?

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值