shell特殊位置变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell特殊位置变量相关的知识,希望对你有一定的参考价值。

1.shell中特殊且重要的变量

1.1 shell中的特殊位置参数变量

在shell脚本中有一些特殊且重要的变量,例如:$0、$1、$#,称它们为特殊位置参数变量。需要从命令行、函数或脚本执行等传参时就要用到位置参数变量。下图为常用的位置参数:

技术分享图片

(1) $1 $2...$9 ${10} ${11}特殊变量实战

范例1:设置15个参数($1~$15),用于接收命令行传递的15个参数。

[[email protected] ~]# echo ${1..15}
$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
[[email protected] ~]# echo echo ${1..15}
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
[[email protected] ~]# echo echo ${1..15}>m.sh
[[email protected] ~]# cat m.sh 
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
[[email protected] ~]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

执行结果如下:

[[email protected] ~]# sh m.sh {a..z}
a b c d e f g h i a0 a1 a2 a3 a4 a5

当位参数数字大于9时,需要用大括号引起来

[[email protected] ~]# cat m.sh 
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
[[email protected] ~]# sh m.sh {a..z}
a b c d e f g h i j k l m n o

(2)$0特殊变量的作用

$0的作用为取出执行脚本的名称(包括路径)。

范例2:获取脚本的名称及路径

[[email protected] jiaobenlianxi]# cat b.sh
echo $0

不带路径输出脚本的名字

[[email protected] jiaobenlianxi]# sh b.sh 
b.sh

带全路径执行脚本输出脚本的名字还有路径

[[email protected] jiaobenlianxi]# sh /home/linzhongniao/jiaobenlianxi/b.sh 
/home/linzhongniao/jiaobenlianxi/b.sh

有关$0的系统生产场景如下所示:

[[email protected] ~]# tail -6 /etc/init.d/rpcbind 
echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|try-restart}"
RETVAL=2
;;
esac
exit $RETVAL

(3)$#特殊变量获取脚本传参个数实战

范例3:$#获取脚本传参的个数

[[email protected] ~]# cat m.sh  
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
echo $#
[[email protected] ~]# sh m.sh {a..z}
a b c d e f g h i j k l m n o  只接受15个变量,所以打印9个参数
26  传入26个字符作为参数

(4)$*和[email protected]特殊变量功能及区别说明

范例4:利用set设置位置参数(同命令行脚本的传参)

[[email protected] ~]# set -- "I am" linzhongniao
[[email protected] ~]# echo $#
2
[[email protected] ~]# echo $1
I am
[[email protected] ~]# echo $2
linzhongniao

测试$*和[email protected],不带双引号

[[email protected] ~]# echo $*
I am linzhongniao
[[email protected] ~]# echo [email protected]
I am linzhongniao

带双引号

[[email protected] ~]# echo "$*"
I am linzhongniao
[[email protected] ~]# echo "[email protected]"
I am linzhongniao
[[email protected] ~]# for i in "$*";do echo $i;done $*引用,引号里的内容当做一个参数输出
I am linzhongniao
[[email protected] ~]# for i in "[email protected]";do echo $i;done [email protected]引用,引号里的参数均以独立的内容输出
I am
linzhongniao

以上是关于shell特殊位置变量的主要内容,如果未能解决你的问题,请参考以下文章

shell中的位置变量和特殊变量

shell特殊位置变量

shell--特殊位置参数变量及常用内置变量

Shell中的特殊位置参数变量全文收录

Shell变量知识进阶

Shell编程-03-Shell中的特殊变量和扩展变量