shell脚本中$符号的命令使用汇总

 更新时间:2020年11月11日 14:35:57   作者:AsiaYe  
这篇文章主要介绍了shell脚本中$符号的使用示例,帮助大家更好的理解和学习shell 语言的用法,感兴趣的朋友可以了解下

    今天是远程办公的第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 $的资料请关注脚本之家其它相关文章!

相关文章

  • Linux Shell 自动交互功能实现

    Linux Shell 自动交互功能实现

    本文主要介绍了Linux Shell 自动交互功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • linux patch 命令小结(收藏)

    linux patch 命令小结(收藏)

    说到patch命令,就不得不提到diff命令,也就是制作patch的必要工具。这篇文章主要介绍了linux patch 命令小结,需要的朋友可以参考下
    2017-02-02
  • Shell逐行读取文件的4种方法

    Shell逐行读取文件的4种方法

    这篇文章主要介绍了Shell逐行读取文件的4种方法,本文介绍了while循环法、重定向法、管道法、文件描述符法等一些方法,需要的朋友可以参考下
    2014-12-12
  • linux 操作 ftp 常用命令

    linux 操作 ftp 常用命令

    ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍linux 操作 ftp 常用命令,需要的朋友参考下吧
    2017-12-12
  • linux删除无效链接文件脚本分享

    linux删除无效链接文件脚本分享

    一个 shell 脚本文件,用于删除指定目录下无效链接文件,可利用标准输入指派多个处理目标
    2014-03-03
  • Linux下find和grep常用命令及区别介绍

    Linux下find和grep常用命令及区别介绍

    在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep,这两个命令还是有区别的,下面通过本文给大家讲解Linux下find和grep常用命令及区别介绍,需要的的朋友参考下吧
    2017-07-07
  • 简化shell终端命令输入的脚本式快捷键工具

    简化shell终端命令输入的脚本式快捷键工具

    这篇文章主要介绍了简化shell终端命令输入的脚本式快捷键工具,这是一个shell脚本写的简化shell命令输入的快捷键工具,需要的朋友可以参考下
    2015-03-03
  • 如何实现ls命令在Win7下正常运行

    如何实现ls命令在Win7下正常运行

    ls命令是Linux系统下最常用的命令之一,使用ls指令可列出目录中的内容,包括文件和子目录的名称,下面通过本文给大家分享如何实现ls命令在Win7下正常运行,需要的朋友参考下吧
    2018-03-03
  • 基于Shell中for循环的几个常用写法分享

    基于Shell中for循环的几个常用写法分享

    今天小编就为大家分享一篇基于Shell中for循环的几个常用写法分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Shell脚本传参数方法总结

    Shell脚本传参数方法总结

    这篇文章主要介绍了Shell脚本传参数方法总结,本文着重讲解传递固定个数参数的方法、可变个数参数的方法两部份内容,需要的朋友可以参考下
    2015-05-05

最新评论