脚本经常用的上,但老是记不住的一些东西:
一、逻辑运算
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]