who | wc -l
善用这个观念,对精简 script 有相当的帮助 。
! 惊叹号(negate or reverse) 逻辑运算意义上的非(not)的意思
1、通常它代表反逻辑的作用,譬如条件侦测中,用 != 来代表"不等于"
if [ "$?" != 0 ]then echo "Executes error" exit 1 fi2、在规则表达式中她担任 "反逻辑" 的角色
ls a[!0-9]上例,代表显示除了a0, a1 .... a9 这几个文件的其他文件 。
3、在history命令中“!”号的用法
[root@RHEL6 ~]#history ...... 1036 echo $$ 1037 ll 1038 ll | grep '^d' 1039 ll | grep "^d" 1040 history 1041 ll | grep '^d' 1042 history [root@RHEL6 ~]# !1038 //执行第1038条命令 ll | grep '^d' drwxr-xr-x. 2 root root 4096 Jun 12 15:23 bin drwxr-xr-x. 2 root root 4096 Jun 16 15:33 scripts drwxr-xr-x. 7 root root 4096 Nov 21 2014 vmware-tools-distrib [root@RHEL6 ~]# !! //执行上一个命令也就是刚刚的!1038 ll | grep '^d' drwxr-xr-x. 2 root root 4096 Jun 12 15:23 bin drwxr-xr-x. 2 root root 4096 Jun 16 15:33 scripts drwxr-xr-x. 7 root root 4096 Nov 21 2014 vmware-tools-distrib [root@RHEL6 ~]# !echo //执行最近一echo为开头的命令,也就是1036那条命令 echo $$ 4316 [root@RHEL6 ~]#!$的用法
mkdir /var/www/html/upload chown -R Apache !$ #这时的!$表示上一条命令 mkdir /var/www/html/upload,也就是chown将/var/www/html/upload的所有者权限分配给apache这个用户
: 冒号
在 bash 中,这是一个内建指令:"什么事都不干",但返回状态值 0 。
:
echo $? # 回应为 0
: > f.
上面这一行,相当于cat/dev/null>f.
。不仅写法简短了,而且执行效率也好上许多 。
有时,也会出现以下这类的用法
: ${HOSTNAME?} ${USER?} ${MAIL?}
这行的作用是,检查这些环境变数是否已设置,没有设置的将会以标准错误显示错误讯息 。像这种检查如果使用类似 test 或 if这类的做法,基本上也可以处理,但都比不上上例的简洁与效率 。
除了上述之外,还有一个地方必须使用冒号
PATH=$PATH:$HOME/fbin:$
HOME/fperl:/usr/local/mozilla
在使用者自己的HOME 目录下的 .bash_profile或任何功能相似的档案中,设定关于"路径"的场合中,我们都使用冒号,来做区隔 。
* 星号 (wild card)
相当常用的符号 。
1、在文件名扩展(Filename expansion)上,她用来代表0到无穷多个任意字符 。
[root@RHEL6 ~]# ls a* aaa anaconda-ks.cfg [root@RHEL6 ~]#2、在正则表达式(Regular Expressions)中,*代表重复零个到无穷多个的前一个字符,如:grep -n 'ess* file.txt,则可能会匹配es、ess、esss等等 。正则表达式中的0到无穷多个字符使用的是“.*”表示 。
3、在运算时,它则代表 "乘法" 。
let "fmult=2*3"
除了内建指令 let,还有一个关于运算的指令expr,星号在这里也担任"乘法"的角色 。不过在使用上得小心,他的前面必须加上escape 字元 。
** 次方运算
两个星号在运算时代表 "次方" 的意思 。
let "sus=2**3"echo "sus = $sus" # sus = 8
$及$$ 钱号(dollar sign)
1、使用变量的前导符,即变量之前需要加的变量替代值
变量替换(Variable Substitution)的代表符号 。
[root@RHEL6 ~]# vrs=123 [root@RHEL6 ~]# echo "vrs = $vrs" vrs = 123 [root@RHEL6 ~]#2、在 Regular Expressions 里被定义为 "行" 的最末端 (end-of-line) 。这个常用在grep、sed、awk 以及 vim(vi) 当中 。
[root@RHEL6 ~]# ll | grep "txt$" //列出行末是txt结尾的行 -rw-r--r--. 1 root root 1700 May 21 10:50 1.txt -rw-r--r--. 1 root root 650 May 31 18:11 123.txt -rw-r--r--. 1 root root 1700 May 21 10:50 2.txt -rw-r--r--. 1 root root 923 May 27 09:20.NETwork.txt -rw-r--r--. 1 root root 96 Jun 1 17:58 printf.txt -rw-r--r--. 1 root root 673 Jun 1 12:24 regular_express.txt3、在bash中$本身也是个变量 。代表的是目前这个shell的进程代码,即所谓的PID(Process ID)想要知道我们当前的shell的PID,可以这样
[root@RHEL6 ~]# echo $$ 4316 [root@RHEL6 ~]#出现的数字就是你的PID号码
$!
Shell最后运行的后台Process的PID
? 问号
1、在文件名扩展(Filename expansion)上扮演的角色是匹配一个任意的字元,但不包含 null 字元 。
[root@RHEL6 ~]# ls m?n* man.1 man.test [root@RHEL6 ~]#善用她的特点,可以做比较精确的档名匹配 。
2、在bash中“?”问号也是一个特殊的变量 。在bash里面这个变量很重要 。这个变量是上一个执行的命令所回传的值 。当我们执行某些命令时,这些命令都会回传一个执行后的代码,一般说,如果成功执行该命令,则会回传一个0值,如果执行过程发生错误,就会回传错误代码 。一般以非0的数值来替代 。
推荐阅读
- 10 大可以摧毁你的 Linux 的命令
- 京东科技Redis跨数据中心双向同步优化实践
- 磕碰伤如何处理
- 脸过敏吃什么蔬菜好
- 牛奶中度过敏
- 过敏喉咙堵塞
- 马苏|知名导演聚餐获5位女生相陪,摸头牵手关系亲密,马苏现身其中
- 普京|普京就征兵过程中出现的问题作出以下批示和纠正,要求立即进行调整!
- 曹云金|曹云金:本该前程似锦,却自毁前程,其中原因不值得同情!
- 莱昂纳多·迪卡普里奥|小李子发文斥责中国渔民捕鱼,网友:管好你自己
