脚本经常用的上,但老是记不住的一些东西:

一、逻辑运算

eq 相等
ne、neq 不相等
gt 大于
lt 小于
gte、ge 大于等于
lte、le 小于等于
not 非
mod 求模
is [not] div by 是否能被某数整除
is [not] even 是否为偶数
is [not] odd 是否为奇数
-a  存在则为真
-b  存在且是一个块特殊文件则为真
-c  存在且是一个字特殊文件则为真
-d  存在且是一个目录则为真
-e  存在则为真
-f  存在且是一个普通文件则为真
-g  存在且已经设置了SGID则为真
-h  存在且是一个符号连接则为真
-k  存在且已经设置了粘制位则为真
-p  存在且是一个名字管道(F如果O)则为真
-r  存在且是可读的则为真
-s  存在且大小不为0则为真
-t  打开且指向一个终端则为真
-u  存在且设置了SUID则为真
-w  存在且是可写的则为真
-x  存在且是可执行的则为真
-O  存在且属有效用户ID则为真
-G  存在且属有效用户组则为真
-L  存在且是一个符号连接则为真
-N  存在 and has been mod如果ied since it was last
read则为真
-S  存在且是一个套接字则为真

二、特殊变量

$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的进程ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
$((...)) 对括号内的表达式求值

三、打印格式

free -m awk ‘/Mem/{printf “%.0fn”,$1*0.9}’

自动取整数: %代表任意长度,0表示保留.后0位数字

四、翻转文件

sed ‘1!G;h;$!d’ file
sed -n ‘1!G;h;$p’ file

sed的man说法如下:
h
H        Copy/append
pattern space to hold space.
g
G        Copy/append
hold space to pattern space.
这两个space,我的理解就是hold是厂房(原料和成品都放这,汗~),pattern是流水线。
如果是正常的sed,应该是所有的原料一起上流水线处理,然后统一成品输出。所以顺序不变;但上面这个命令,每处理一行就清空一次流水线,最后成品就成倒序了。
还有一个x,用来互换两个space的文本。

五、正则表达式

pattern{n}:只用来匹配前面pattern出现的次数.n为次数。如a{2}匹配aa.
pattern{n,}:含义同上,但次数最少为n.如a{2,}匹配aa,aaa,aaaa,.....
pattern{n,m}:含义同上,但次数在n和m之间。如a{2,4}匹配aa,aaa,aaaa三个
[0123456789]或[0-9] :假定要匹配任意一个数字
[a-z] :任意小写字母
[A-Za-z] :任意大小写字母
[S,s] :匹配大小写S
[0-9]{3}.[0-9]{3}.[0-9]{3}.[0-9]{3} :匹配IP地址 [0-9]{3}三个0-9组成的字符串;. :匹配点(注意这里点是特殊的字符,所以要用""来屏蔽其含义)
用于grep和awk的类名(其他能不能我还不知道)
[[:upper:]]   表示[A-Z]
[[:alnum:]]   表示[0-9a-zA-Z]
[[:lower:]]   表示[a-z]
[[:space:]]   表示空格或者tab键
[[:digit:]]   表示[0-9]
[[:alpha:]]   表示[a-zA-Z]