linux shell编程

来源:互联网 发布:富士康java工程师待遇 编辑:程序博客网 时间:2024/04/30 07:33

文件第一行应为# !/bin/sh
文件具有执行权限

  • grep

用于抽取字符匹配的行。
>grep -E "^Ethernet|^GigabitEthernet" interface.txt

#抽取以Ethernet或GigabitEthernet开始的行。^表示行的起始,$表示行的结尾
>grep -n "$_tmp" interface.txt|awk -F ":" '{print $1}'

#输出包含shell变量$_tmp的字符串的行号。-n表示输出行号,格式为nnn:xxxxxx。可用awk取出行号
>grep -A 1 "Ethernet" interface.txt|tail -n 1

#输出匹配行的下一行,注意若无下一行时将输出本行。-A表示输出匹配行下的行。tail -n为取尾部的行
>grep -A 3 "swicth" environment.txt|egrep -v '^(swicth|--)'|grep -v "Slot" 

#取包含swicth的行及下面3行,并去掉switch和--开头的行,去掉包含Slot的行。
#egrep是grep的改进版。-v表示去掉匹配的行。--是-A参数加上的行

>grep -i "up" interface.txt

#抽取有UP的行,大小写无关

>grep  "[Sep]" interface.txt

#抽取有存在字符S、e、p的行

  • awk

按分割符将字符串分段并抽取出需要的部分。
>echo "Ethernet1/1/2.1" |awk -F "/" '{print $1"/"$2}' #以/为分割符,获取第1、2部分并按格式输出
Ethernet1/1
>echo "Ethernet1/1/2.1" |awk -F "/" '{print $NF}' #以/为分割符,获取最后部分
2.1
>_input=$(sed -n "1,5p" file)    #抽取file中1-5行放入变量,_input内容为6495542942 octets, 10759575 UcastPkts, 13330 NUcastPkts, 0 discards /n  0 MulticastOctets, 0 MulticastPkts,0 NUcastOctets
>echo _input| awk -F " UcastPkts," '{print $1}' | awk -F "," '{print $NF}' #抽取UcastPkts值。注意_input中保存着两行数据,但并不能用grep来获取其中一行

  • sed

内容编辑器,用于修改、替换、抽取数据
>echo " aaa "|sed 's/^ //g' #滤去空格
>echo " 2008/12/12 "| sed 's////-/g' #用转义符/转义
2008-12-12
>cat a.txt |sed -e :a -e '$!N;N;s/UP/n IP/UP/;ta' -e 'P;D' #将符合条件的2行并一行。将UP结尾及空格IP开头的两行替换为UP,并并为一行。 

  • expr

数值计算
>U=10
>R=`expr $U + 10`
A=$(echo `echo "scale=2;$_e / $_p"|bc`)   #保留小数点后2位
_tmp=$(echo $A | awk -F "." '{print $1}') #当小于1时,.前补0
if [ -z $_tmp ];then
 A=$(echo 0$A)                        
fi 

  • 条件比较

>[ -n "$_status" ]; #-n非空串 ,-z空串
>[ $_p -eq 0 ]; #-eq为等于
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。
>[ "$_id1" = "$_id2" ]; #字符串比较
>[ $_A -eq 0 ] && [ $_B -eq 0 ];

 

字符串不包含Normal
_status=$(echo $str | grep "Normal" )
if [ -n "$_status" ];then
 包含....
else
 不包含...
fi

  • 字符串输出

>echo aaaa #屏幕
>echo aaaa |tee -a file #屏幕和文件
>echo aaaa >> file #追加到文件 

  • 日期

date +%Y%m%d  #20090428
date +%s      #1970-01-01以来的秒数

  • 文件比较

comm -13 file_a file_b #比较文件 1:唯一在file_a,2:唯一在file_b,3:同时在file_a/file_b

原创粉丝点击