十分钟轻松学习系列: 2020-3-25_SHELL学习_各种刀乐$的用法

$在shell中为何非常重要,因为它是美元的标志,虽然现在疫情导致美帝快完犊子了

通过$读取变量的值,具体原理如下图:
变量开辟一块内存空间,就好比你住酒店,变量名相当于门牌号,变量值相当于你。十分钟轻松学习系列: 2020-3-25_SHELL学习_各种刀乐$的用法_第1张图片

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脚本应该传递多少个参数,如果参数值不够,那么脚本流程控制走向发生改变或者报错。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200330105524279.png
    结果如下:
    十分钟轻松学习系列: 2020-3-25_SHELL学习_各种刀乐$的用法_第2张图片

  • ${#}:这个用法见我举例,这个也是最常用的判断方法,计算一个变量或者字符串的长度,开发的同事应该知道一般编程语言中有len()这种函数计算一个列表(数组,切片),map的长度等
    在这里插入图片描述
    执行结果如下正确,本身字符串就由五个字符构成:
    在这里插入图片描述

  • $():讲完了{}的作用,小括号的作用是什么?
    小括号中传递的是linux命令,我们把命令作为键,把命令得到的结果作为值,$()返回的就是命令执行后的值,注意只能传命令!!!!
    在这里插入图片描述
    $(cmd)=`cmd`: 注意这个是反引号,两种方法是等同的:
    在这里插入图片描述
    输出结果如下:
    在这里插入图片描述

  • $*和$@:两个都是将所有传递的参数整合成列表,区别举例如下,记好我说的原则:

    在无 " " 的情况下,$*和 $@ 没有任何区别。
    在双引号括起来的情况下,["$@",$@,$*]一样,都是List类型,可以取出每个列表的元素;
    但是"$*"则编程了所有参数空格隔开后的整个一个大字符串,属于string类型。

    举例说明:

    • 前三个循环["$@",$@,$*]应该都属于换行列表打印,而最后应该是打印出一个所有参数空格隔开的字符串:
      十分钟轻松学习系列: 2020-3-25_SHELL学习_各种刀乐$的用法_第3张图片
    • 结果如下,于我们讨论的结果一致,:
      十分钟轻松学习系列: 2020-3-25_SHELL学习_各种刀乐$的用法_第4张图片

日常生产中所需要的$用法就掌握上述几个就足够了,熟练的掌握非常重要,一般在面试中也会常考,这次没有个大家源码,希望大家手动逐一实验~,掌握使用技巧和方法。

你可能感兴趣的:(十分钟轻松学习系列: 2020-3-25_SHELL学习_各种刀乐$的用法)