linux shell下的一些特殊变量以及神奇的感叹号(!)

  • 内容
  • 评论
  • 相关

日常服务运维工作的时候编写shell script经常用到用到写特殊的变量,正好今天Q群里有小伙伴在提问索性干脆写篇文章存档。

大家都知道在shell脚本中使用变量时变量名前都需要带一个$(和世界上最好的语言php不谋而合。(ಡωಡ) ),既然用户可以自己定义变量那么shell环境中是否和php一样有着一些开箱即用的系统预定义好的特殊变量呢?答案是肯定的,下面奶嘴就为大家一一道来。

1、$$ 当前shell本身的pid。

2、$! shell最后运行的后台进程pid

3、$? 上一个命令执行后的返回值(结束代码int类型)

4、$- shell的可用选项,echo $- 会输出himBH,表示 -h -i -m -B -H参数是可用的,可以参考 help set。

5、$# 输入的参数个数

6、$0 当前shell壳脚本文件名。

7、$1~$n 输入的各个参数值,$1参数1,$2参数2,$3参数3,$n参数n....

8、$* 所有的输入参数的列表,如果用""括起则表示使用空格作为间隔符的参数列表。

9、$@ 同上,一样是表示所有输入的参数列表,唯一不同是用""括起来的时候$@表示使用""包裹并使用空格作为间隔符的参数列表

说完shell变量,我们再来聊聊Linux下感叹号(!)的用法,在linux系统下感叹号是个比较特殊的字符,在shell脚本中表示否定的意思,但是除了这些感叹号在linux还有些比较有趣的功能。

取出并执行历史命令

首先我们执行history命令

[chenxi@JD ~]$ history
history命令

列出历史执行过的命令。然后

[chenxi@JD ~]$ !1 #表示执行第一条命令
[chenxi@JD ~]$ !-1 #执行倒数第一条命令
[chenxi@JD ~]$ !! #执行倒数第一条命令,与!-1效果一样

!$传递上一个命令中的参数

[chenxi@JD ~]$ ls -l
[chenxi@JD ~]$ ls !$

!?字符串 指向最近一次包含此字符串的命令

[chenxi@JD ~]$ ps
  PID TTY          TIME CMD
12053 pts/0    00:00:00 bash
24129 pts/0    00:00:00 ps
[chenxi@JD ~]$ !?p
ps
  PID TTY          TIME CMD
12053 pts/0    00:00:00 bash
24134 pts/0    00:00:00 ps


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,非商业性质可转载须署名链接,详见本站版权声明。

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注