$在shell中为何非常重要,因为它是美元的标志,虽然现在疫情导致美帝快完犊子了
通过$读取变量的值,具体原理如下图:
变量开辟一块内存空间,就好比你住酒店,变量名相当于门牌号,变量值相当于你。
shell脚本中不同$的用法
$?:这个是在流程控制中最常用的,重中之重!
解释说明:$?反映的是上一条命令或者一个流程中的返回值,如果为0,则上面的命令或者流程执行成功;如果非0,则上面的命令或者流程执行失败,常见写法如下图:#!/bin/bash mv nginx.conf /etc/nginx/ #将这个配置文件移动到/etc/nginx目录下 if [ $? -ne 0 ];then #如果 $? != 0,则打印移动失败 echo "移动失败" fi
所以通过上述$?可以判断出上条命令是否成功,从而决定接下来shell流程的走向。
$$:如果执行某个shell脚本,这个显示的是当前进程的PID,注意是进程ID
程序和进程的区别: 程序本身是<数据结构+算法>的集合,可以理解为就是文本堆积,保存在硬盘中,不关内存啥事儿;只有运行起来的程序才叫进程,进程启动需要占用内存空间,完成或者kill后会根据垃圾回收(或手动释放)的方式释放本来占据的内存空间。$1,$2…$n:位参,这个不讲了,用的很多了
$#: 这个提一嘴,这个可以计算出你传递了多少个位置参数
这个在运维开发中经常用作判断,假设计算一个shell脚本应该传递多少个参数,如果参数值不够,那么脚本流程控制走向发生改变或者报错。
结果如下:${#<vars>}:这个用法见我举例,这个也是最常用的判断方法,计算一个变量或者字符串的长度,开发的同事应该知道一般编程语言中有len()这种函数计算一个列表(数组,切片),map的长度等
执行结果如下正确,本身字符串就由五个字符构成:$(<cmd>):讲完了{}的作用,小括号的作用是什么?
小括号中传递的是linux命令,我们把命令作为键,把命令得到的结果作为值,$()返回的就是命令执行后的值,注意只能传命令!!!!:
$(cmd)=`cmd`: 注意这个是反引号,两种方法是等同的:
输出结果如下:$*和$@:两个都是将所有传递的参数整合成列表,区别举例如下,记好我说的原则:
在无 " " 的情况下,$*和 $@ 没有任何区别。
在双引号括起来的情况下,["$@",$@,$*]一样,都是List类型,可以取出每个列表的元素;
但是"$*"则编程了所有参数空格隔开后的整个一个大字符串,属于string类型。举例说明:
- 前三个循环["$@",$@,$*]应该都属于换行列表打印,而最后应该是打印出一个所有参数空格隔开的字符串:
- 结果如下,于我们讨论的结果一致,:
- 前三个循环["$@",$@,$*]应该都属于换行列表打印,而最后应该是打印出一个所有参数空格隔开的字符串: