shell script 学习笔记—–shell变量

1、在赋值语句name=value中不克在空格,例如:name =
value这样的花样会让当是三个变量,因为本质上吧,脚本的内容就是传为shell程序的变量,而变量之间是经过空格区分的。如果想只要在value里面出现空格,则需要因此引号标注出来,想要下变量的情虽然当变量名前加‘$’符号,如下:

图片 1

2、当我们得以一些非空格字符中插入变量时,例如:为了脚本的扩展性,常以路名/home/my$USERtxt中之所以变量取代一部分内容,但是这么做吧,我们实际上无法区分变量名是USER还是USERtxt,解决办法其实生简单,把变量名用花括号括起来即可,如/home/my${USER}txt

3、定义变量时,在变量名前加export就好以该变量变为全局变量,并且可于子shell中调用它,不过需要小心的凡,该全局变量是经过“值传递”的办法进入子shell的,类似与C语言中之函数参数,虽然于子函数中改变了其的价,但是它们本的值并没更改。那么闹没发相近指针的物能一直改动原变量的值也?回答是,没有。(通过env或者export
-p命令可以查阅所有之全局变量)

图片 2

4、同时我们会像C语言一样一直给shell脚本传递命令执行参数,在剧本中$1就象征第一只参数,$2表示第二独参数,以此类推,需要专注的是,当代表第十单以上的参数时,需要为此花括号将先后号括起来,例如:${10},因为$10晤受解释为$1和0。这里要注意的凡,如果命令执行参数表示的字符串里产生空格,那么当输入命令行是要拿拖欠参数用引号括起来,同时以剧本里引用时,也要是利用引号,例如:ls
“${1}”,否则在剧本内部,该参数为会受误认为由空格分割的几近单参数

图片 3

5、在本子中,符号$*代表拥有的授命执行参数,我们可据此如下方式对那开展遍历,不过普通我们再次推荐应用”$@”,因为它们亦可以命令执行参数内部发生空格的早晚用那分别开来

图片 4

6、变量$#用以统计命令执行参数的个数:

图片 5

7、变量的默认值:1)B=${A:-“xxx”}表示要变量A未设置或值为空,则B=“xxx”,2)与:-符号不同之是${A:=”xxx”}表示如果A未安装或也空,则用A设置为”xxx’并且返回值”xxx”,你可认为:-只做回值,而未开赋值。3)${A=”xxx”}表示当且仅当变量A未受设置,它的值置为”xxx”,这么做的意就是是许变量名的默认值为空

图片 6

8、数组变量的定义及运如下所示:bash支持一维数组(不支持多维数组),没有限制数组大小,并且可无动连续的数组下标

下@符号可以拿走数组中之兼具因素,例如 echo ${array[@]}

图片 7

9、最后,其实以变量赋值的当儿,如果用了对引号,那么对引号内的得不仅仅是字符串,实际上shell会将引号内之始末展开分析。例如引号内的$HOME将为替换成变量HOME的价,$(pwd)将吃调换成令pwd的出口,$((1+1))则将于替换成1+1运算的结果

图片 8

10、字符串可以用单引号,双引号,也足以毫无引号。其中单引号里之另字符都见面相输出,单引号字符串中之变量是不行的,单引号字符串里无克冒出单引号,对单引号使用转义符也十分。相反,双引号中好起变量,也得起转义字符。

11、shell中倒引号起在命令替换的图。命令替换是凭借shell能够将一个下令的业内输出插入到一个命令执行吃之其他岗位。示例如下:

图片 9

 

参考文献:《bash Cookbook》,Carl Albing