• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    shell脚本中$符号的命令使用汇总
    POST TIME:2021-10-18 15:53

        今天是远程办公的第4天,渐渐的找到了一点在家办公的节奏了,改了几个shell脚本,在改动过程中,发现还有一些知识点需要巩固,这里写出来,加深下印象。

       关于$符号,大家肯定都不陌生,在shell脚本中,$的作用还是比较大多的,这里将所有的$组合都列出来,大家可以看下效果。

       $组成的命令大概有下面几个:

    $0,$1...$?,$!,$$,$*,$#,$@

    下面分别看看这些意思是什么:

    1.$0,$1

    $0和$1比较好理解,他们的意思,分别是脚本名称和脚本的第一个参数,我们举个例子来看:

    jwfyyzdembp:tmp jwfyyz$ cat test.sh
    echo '$0的含义是':$0
    echo '$1的含义是':$1
    jwfyyzdembp:tmp jwfyyz$ ./test.sh yeyz
    $0的含义是:./test.sh
    $1的含义是:yeyz
    jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz
    $0的含义是:test.sh
    $1的含义是:yeyz

       需要注意一点,当使用./test.sh的方法来运行脚本的时候,$0的值是./test.sh,而不是test.sh

    2.$?

    $?指的是最后运行的命令的执行返回码,执行成功,则返回0,否则返回1,举例如下:

    jwfyyzdembp:tmp jwfyyz$ cat test.sh 
    echo '$0的含义是':$0
    echo '$1的含义是':$1
    ls -l a.txt
    echo '$?的结果是'$?
    ls -l test.sh
    echo '$?的结果是'$?
    
    jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz
    $0的含义是:test.sh
    $1的含义是:yeyz
    ls: a.txt: No such file or directory
    $?的结果是1
    -rwxr-xr-x 1 jwfyyz wheel 124 2 7 20:32 test.sh
    $?的结果是0

       可以看到,第一次运行ls -l a.txt的时候,由于我们的目录中没有a.txt这个文件,所以返回是1,第二次由于test.sh文件是存在的,所以返回的结果是0

    3.$$

      $$指的是脚本运行的当前进行id号,举例如下:

    jwfyyzdembp:tmp jwfyyz$ cat test.sh 
    pwd
    echo $$
    sleep 10
    
    jwfyyzdembp:tmp jwfyyz$ sh test.sh 
    [1] 60658
    
    jwfyyzdembp:tmp jwfyyz$ ps -ef|grep test
     501 60658 60529 0 8:36下午 ttys000 0:00.01 sh test.sh
     501 60661 60529 0 8:36下午 ttys000 0:00.00 grep test

       我们在test.sh脚本后面设置了sleep 10的命令,脚本运行完会睡眠10s,脚本中打印出来了值60658,此时我们查看当前脚本的进程号,发现子进程的进程id是60658

    4.$*和$@

      这两个放在一起,主要是因为他们都代表引用的所有参数,单独打印出来结果,都是一样的,但是循环打印他们的内容,则会看出区别,举例如下:

    jwfyyzdembp:tmp jwfyyz$ cat test.sh 
    echo '$*的结果是':$*
    echo '$@的结果是':$@
    echo "-- \$* 演示 ---"
    for i in "$*"; do
     echo $i
    done
    
    echo "-- \$@ 演示 ---"
    for i in "$@"; do
     echo $i
    done
    
    jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3
    $*的结果是:yeyz 1 2 3
    $@的结果是:yeyz 1 2 3
    -- $* 演示 ---
    yeyz 1 2 3
    -- $@ 演示 ---
    yeyz
    1
    2
    3

       可以看到,循环打印的时候,$@ 

    5.$#

      $#容易理解,它的意思是参数的个数。举例:

    jwfyyzdembp:tmp jwfyyz$ cat test.sh 
    echo '$*的结果是':$*
    echo '$@的结果是':$@
    echo '$#的结果是':$#
    
    jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3
    $*的结果是:yeyz 1 2 3
    $@的结果是:yeyz 1 2 3
    $#的结果是:4

    6.$!

      该命令是显示shell脚本中上一个后台执行命令的进程id号,如下:

    jwfyyzdembp:tmp jwfyyz$ cat test.sh 
    echo '$*的结果是':$*
    echo '$@的结果是':$@
    echo '$#的结果是':$#
    sleep 10 
    echo '$!的结果是':$!
    sleep 10
    
    jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3 
    [1] 61237
    $*的结果是:yeyz 1 2 3
    $@的结果是:yeyz 1 2 3
    $#的结果是:4
    $!的结果是:61238
    
    jwfyyzdembp:tmp jwfyyz$ ps -ef|grep sleep
     501 61238 61237 0 9:12下午 ttys000 0:00.00 sleep 10
     501 61239 61237 0 9:12下午 ttys000 0:00.00 sleep 10
     501 61241 60529 0 9:12下午 ttys000 0:00.00 grep sleep

      在test.sh中,我们使用了sleep 10这样的命令在后台执行,然后我们可以看到,$!返回的值是61238,当我们ps -ef命令去查询进程信息的时候,可以看到,61238这个进程对应的命令就是sleep 10,注意和$$区分开来,$$反应的是当前脚本执行的进程号,$!反应的是脚本中某个命令的进程号。

    以上就是shell脚本中$符号的使用示例的详细内容,更多关于shell $的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • 区分shell中的 反引号、$()和${}
    • 详解Shell 脚本中 “$” 符号的多种用法
    • Shell $0, $#, $*, $@, $?, $$和命令行参数的使用
    • 浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释
    • 用来检测输入的选项$1是否在PATH中的shell脚本
    • Shell中的${}、##和%%使用范例
    • PowerShell中的特殊变量$null介绍和创建多行注释小技巧
    • PowerShell函数中使用$PSBoundParameters获取输入参数列表实例
    • PowerShell中的$Input变量使用实例
    • PowerShell默认参数$PSDefaultParameterValues结合Out-File输出到日志文件
    上一篇:shell语言date的用法实例
    下一篇:shell脚本实现统计文件大小、批量创建用户的示例
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信