Shell脚本,awk条件判断if与逻辑比较&&,||
O、条件判断解决的一些问题:
1、输出所有行还是部分行,
2、输出行的部分数据内容,
3、设置多个条件
语法:
awk [选项]’[条件]{指令}’ dir
条件可以填写:正则表达式,数值/字符比较,逻辑比较
一、正则
~匹配,!~不匹配
1、awk ‘/^ro/{print $1,$7}’ dir
以:为分割符,打印文件中包含以ro开头的内容行的第一列和第七列
2、awk -F: ‘$7!~/bash$/{print $1,$7}’ dir
以:为分割符,指定文件中第七列不是以bash结尾的行,打印其第一列和第七列
3、awk -F: ‘$7~/bash$/{print $1,$7}’ dir
以:为分割符,指定文件中第七列是以bash结尾的行,打印其第一列和第七列,如果列数$后面没有~接正则就会报语法错。
二、数值,字符串比较,像if但是省略了if
==等于,!=不等于,>大于,>=大于等于,<小于,<=小于等于
1、awk ‘NR==2{print}’ dir
打印行号为2的行的内容
2、awk -F: ‘$7!="/bin/bash"’ dir
以:为分隔符,打印第七列字符串不为"/bin/bash"的行的所有行内容
3、awk -F: ‘$3>=1000{print $1}’ dir
以:为分隔符,打印第三列数字大于等于1000的行内容的第一列
4、awk ‘NR%2==0’ dir
打印指定文件偶数行的所有行内容
三、、逻辑比较
&&逻辑与
awk -F: ‘$3>=0&&$3<2{print $1,$3}’ /etc/passwd
以:为分隔符,打印第三列数字大于等于0,且小于2的行的第一列和第三列信息。
||逻辑或
awk -F: ‘$30||$32{print $1,$3}’ /etc/passwd
以:为分隔符,打印第三列数字等于0,或者等于2的行的第一列和第三列信息。