jasmine214--love

          只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          Shell練習

          Posted on 2011-01-22 10:35 幻海藍夢 閱讀(520) 評論(0)  編輯  收藏 所屬分類: Linux 、Shell
          1.找出test目錄下小于100k和大于300k的文件
          # !/bin/sh
          ls -l /tmp/test/ |awk '{print $9}' |grep -v ^$ | while read LINE
          do
          size=`ls -l /tmp/test/$LINE |awk '{print $5}'`
          if [ $size -le 100 -o $size -ge 300 ];then
          #mv $LINE /tmp
          echo $LINE
          fi
          done
          或:
          find /tmp -size -100k -o -size +300k -exec ls -l {} \;

          2.找出test目錄下大小在40K-60K之間的文件
          find test -size +40k -a -size -60k -exec ls -l {} \;


          3、在目錄/tmp下找到100個以abc開頭的文件,然后把這些文件的第一行保存到文件new中。
          #!/bin/sh
          cd /tmp
          for i in `find . -type f -name "abc*"| head -n 100`
          do
          head -n1 $i>>new
          done


          4、把文件b中有的,但是文件a中沒有的所有行,保存為文件c,并統計c的行數。
          # !/bin/sh
          for i in `cat b`
          do
          grep $i a                     #將b中的行,在a中查找
          if [ "$?" -gt "0" ];then      #如果結果大于0(即為找不到)
          echo $i>>c                    #將此行輸入到c中
          fi
          done
          統計行數wc -l即可~

          這個不對,但是先保留著吧~
          排除重復的,再用cut,已1為分隔域,打印出第二域到最后一域
          cat b a | sort -n |uniq -c | awk '{if ($1==1) print $0}'|cut -f2- -d "1" | wc -l
          另外 uniq -u就可以打印出不重復的。

          5.實現從1加到100,得出結果:
          一:
          #!/bin/sh

          i=1
          sum=0
          while [ $i -le 100 ]
          do

                 sum=`expr $sum + $i`
                  i=`expr $i + 1`
          done
          echo $sum

          二:
          i=1
          b=0
          for i in {1..100}
          do
                  b=$[$b + $i]
          done
          echo $b

          三:
          # !/bin/sh
          s=0
          for((i=1;i<101;i++));do
          s=`expr $s + $i`
          done
          echo $s

          四:
          # !/bin/sh
          i=1
          num=0
          while [ "$i" != "101" ]
          do
          num=`expr $i + $num`
          i=`expr $i + 1`
          done
          echo $num


          6,文件內容為
          admin: aa@test.com
          body: bb@test.com
          admin: cc@test.com
          把匹配admin 的行后面加上 ;aa@163.com
          sed -r 's/(admin)(.*)/\1\2 ;aa@163.com/g' filename
          admin: aa@test.com ;aa@163.com
          body: bb@test.com
          admin: cc@test.com ;aa@163.com

          -r, --regexp-extended       

          use extended regular expressions in the script.
          -r 使sed在腳本中使用正則表達式
          \1\2即表示前面的(admin)(.*)

          7,文件內容為:
          1 aaa 1000
          2 bbb 1000
          3 aaa 1000
          4 aaa 1000
          5 ccc 1000
          6 bbb 1000
          將其變成:
          1 aaa 3000
          2 bbb 2000
          5 ccc 1000
          腳本:
          # !/bin/sh
          for i in `awk '{print $2}' filename |sort|uniq`
          do
          grep $i filename >$i.txt
          sum=`awk '{tot+=$3}; END{print tot}' $i.txt`
          three=`sed -n '1p' $i.txt |awk '{print $3}'`
          sed -i "s/$three/$sum/g" $i.txt
          head -n1 $i.txt >>last
          rm -f $i.txt
          done

          8,文件內容:
          this
          is
          a
          test
          script
          將其變成:
          this is a test script
          腳本:
          echo `cat filename`

          9,比較字符串大小(主要是用到了sort來比較)
          VAR1=abc
          VAR2=def
          tt=`echo -e "$VAR1\n$VAR2"|sort|head -1`
          if [ "$tt" = "$VAR1" ];then
          echo $VAR1 relatively large!
          else
          echo $VAR2 relatively large!
          fi

          10.合并相同項
          [root@test1 tmp]# more file1
          DAD|15.0|
          JAB|2.0|
          JAH|55.0|
          HAH|11|
          [root@test1 tmp]# more file2
          DAD|773.0|
          GGC|2.0|
          JAB|224.0|
          HOH|22|
          將其合并成:
          DAD     15.0    773.0
          JAB     2.0     224.0
          GGC     2.0
          HOHO    22
          JAH     55.0
          腳本:(感覺寫的有點笨了)
          # !/bin/sh
          cat file1 file2 |awk -F'|' '{print $1}'| sort |uniq -c >tmp

          for i in `awk '{if ($1 >=2) print $2}' tmp`
          do
          echo `cat file1 file2 |grep $i` | awk -F'|' '{print $1"\t"$2"\t"$4}' >>last.txt
          done
          for b in `awk '{if ($1==1) print $2}' tmp`
          do
          echo `cat file1 file2 |grep $b` | sed 's/|/\t/g' >>last.txt
          done
          rm -f tmp
          簡單的:
          join -a 1 -a 2 -t "|" file* |sort -t"|" -rk3 |awk -F'|' '{print $1"\t"$2"\t"$3$4}'


          11,字母分離
          將abcdefghijklmnopqrstuvwxy分離成為:
          abcde
          fghij
          klmno
          pqrst
          uvwxy
          用到sed配合正則表達式:
          sed 's/\(.....\)\(.....\)\(.....\)\(.....\)\(.....\)/\1\n\2\n\3\n\4\n\5/' filename

          12.每隔5秒檢測另一臺服務器上的apache服務,直到其啟動后,echo OK
          # !/bin/sh
          echo | telnet 192.168.2.189 80 >check.txt
          grep -i connected check.txt
          while [ $? -ne 0 ]         #如果上面grep的結果不為0
          do
          echo no
          sleep 5
          echo | telnet 192.168.2.189 80 >check.txt
          grep -i connected check.txt
          done
          echo OK!!!!!!!!!!!

          13.在/tmp/下建0-255目錄,再每個目錄再建0-255個目錄,然后在最下級目錄下面建100個文件
          原來寫的:
          for ((i=0;i<255;i++));do
          mkdir -p $i
          for ((b=0;b<255;b++));do
          mkdir $i/$b
          for ((c=0;c<100;c++));do
          touch $i/$b/$c
          done
          done
          done
          接下來看一個超簡單的:建5個目錄,再每個目錄再建5個目錄,然后在最下級目錄下面建5個文件
          mkdir -p {0..5}/{0..5} && touch {0..5}/{0..5}/{0..5}

          14.記錄sed的一個用法:
          i=1
          sed s/2/$i/g file   不需要寫成 sed 's/2/$i/g' file
          這樣的好處就是可以使用變量了

          原文: http://hi.baidu.com/ggb98/blog/item/eabebfee930fd3ffcf1b3eee.html

          主站蜘蛛池模板: 博爱县| 平远县| 苗栗县| 平果县| 濮阳市| 西乌| 肥城市| 荆门市| 菏泽市| 黄浦区| 娄烦县| 鄂州市| 安仁县| 钟山县| 保靖县| 宁波市| 宜丰县| 长岭县| 原平市| 聂拉木县| 西安市| 荥经县| 彭泽县| 吉木乃县| 黔江区| 灌南县| 开远市| 霍林郭勒市| 辽阳市| 嘉鱼县| 酉阳| 新沂市| 上林县| 东乌| 柳河县| 休宁县| 鲁甸县| 澎湖县| 拜泉县| 朔州市| 林西县|