日常服务运维工作的时候编写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 国际许可协议进行许可,非商业性质可转载须署名链接,详见本站版权声明。