jasmine214--love

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

          Shell筆試題3

          Posted on 2011-02-09 17:45 幻海藍夢 閱讀(1010) 評論(0)  編輯  收藏 所屬分類: Shell
          1.查找當前目錄中所有大于500M的文件,把這些文件名寫到一個文本文件中,并統計其個數。
          find ./ -size +500M -type f | tee file_list | wc -l

          2.在目錄/tmp下找到100個以abc開頭的文件,然后把這些文件的第一行保存到文件new中。
          for filename in `find /tmp -type f -name "abc*"|head -n 100`
          do
          sed -n '1p' $filename>>new
          done

          3.把文件b中有的,但是文件a中沒有的所有行,保存為文件c,并統計c的行數。
          grep -xvf a b | tee c | wc -l

          5.每隔10分鐘監控一次,監控/usr下如果大于5G,發郵件給管理員
          #!/bin/bash
          while true
          do
              sleep 600
              n=$(du -s /usr | cut -f1)
              if [ $n -gt 5242880 ]
              then
                  mail -s "greater" filwsyl@gmail.com < ~/filename #將文件filename的內容發送出去。
              fi
          done
          把某個目錄下的文件擴展名改為bat,再以時間為文件名壓縮打包存放到某個目錄。
          #!/bin/bash
          for file in $(ls $1)
          do
              new_file=${file%.*}.bat
              mv ./$1/$file ./$1/$new_file
              tmp=$(date +%y)
              tar cvf ./$tmp.tar ./$1
          done

          9.從網上下載一個文件,保存到指定目錄
          #!/bin/bash
          url=http://rs1.bn.163.com/ent/2009/05/20_canquedege.wma
          dir=~/下載
          wget -P $dir $url

          10.判斷一個數是不是完數。打印出1-1000之間的完數。 完數就是約數的和等于自身2倍的數。(6,28,496)
          #!/bin/bash
          sub()
          {
              i=1;
              sum=0;
              while [ $i -le $num ]
              do
                  let "m=num%i"
                  if [ $m -eq 0 ]
                  then
                      let "sum=sum+i"
                  fi
                  let "i=i+1"
              done
              let "a=2*num"
              if [ $a -eq $sum ]
              then
                  echo $num
              fi
          }
          num=1
          while [ $num -le 1000 ]
          do
              sub
              let "num = num+1"
          done

          11.以行為單位,求文件A和文件B交集,并集,差集。
          并:
          sort -m <(sort A | uniq) <(sort B | uniq) | uniq
          交:
          sort -m <(sort A | uniq) <(sort B | uniq) | uniq -d
          差:
          sort -m <(sort A | uniq) <(sort B | uniq) <(sort B | uniq) | uniq -u

          12.在某個文件夾下查找含有指定字符串的文件
          #!/bin/bash
          for file in $(ls $2)
          do
              bname=$(grep -l $1 $2/$file)
              basename $bname
          done
          調用方法:./tst 000 bash#在文件夾bash中查找含有“000”的文件。

          19.一個文件內容全部是類似
          【202.205.151.21】--【23:59:22】-“HTTP GET”-“Mozila”
          ...
          寫一個SHELL命令找出最多的10個IP
          awk -F "--" '{print $1}' shit | sort | uniq -c | sort -r | sed -n '1,10p'

          20./tmp路徑下有800個文件,文件名的格式是:filename_YYYYMMDD_序列號(從001到999).dat, 例如:filename_20040108_089.dat。現在想把這些文件改名,新文件名的格式是:filename_TODAY(當前日期)_序列 號(從500開始,到達999之后從001開始).dat,例如: 把filename_20040108_089.dat改為filename_20041222_589.dat,注意新文件名的序列號的順序需要和原來 的一致,即要做排序處理。
          #!/usr/bin/bash
          DEST_FILE_PART2="_`date '+%Y%m%d'`_"
          EXT_NAME=".dat"
          SRC_FILE_LIST=`find /tmp -name "*_*_*$EXT_NAME" -print`
          for each in $SRC_FILE_LIST; do
              DEST_FILE_PART1=`echo $each | awk -F"_" '{print $1}'`
              OLD_NUM=`echo $each | awk -F"_" '{print $3}' | awk -F"." '{print $1}'`
              DEST_FILE_PART3=`expr $OLD_NUM + 500`
              [ $DEST_FILE_PART3 -gt 999 ] && DEST_FILE_PART3=`expr $OLD_NUM - 499`
                  && DEST_FILE_PART3=`printf %03d $DEST_FILE_PART3`
              DEST_FILE=$DEST_FILE_PART1$DEST_FILE_PART2$DEST_FILE_PART3$EXT_NAME
              echo "mv $each to $DEST_FILE"
              mv $each $DEST_FILE
          done
          我的解法:
          #!/bin/bash
          new_file=$(date +20%y%m%d);
          for file in $(ls ~/bash)
          do
              i=$(echo "$file" | sed 's/.*_[0-9]*_\([0-9]*\).dat/\1/')    #取出序列號
              i=$(echo $i | sed 's/^0*\([0-9]*\)/\1/')                #去掉序列號前面可能的 ‘0’,
              let "ii=i+500"
              if [ $ii -gt 999 ]
              then
                  let "ii=ii-999"
              fi
              ii=`printf %03d $ii`                            #添上可能需要的‘0’
              update=$(echo "$file" | sed 's/\(.*\)_[0-9]*_[0-9]*.dat/\1_'$new_file'_'$ii'.dat/')
              mv ~/bash/$file ~/bash/$update
          done

          21.要求:在一個腳本中完成這個程序
          1.從文件user.list中取出已給定的用戶名和用戶組,將這些用戶和組按規則添加到系統中
          2.從password.list中讀取已經給定的用戶密碼。
          user.list如下
          zhangsan adminuser,dbuser,updatauser
          lisi dbuser,updatauser
          wanger updatauser,wheel

          #!/bin/bash
          #group add
          for x in ‘awk ‘{print $2}’ user.list | sed ’s/,/\n/g’ | sort | uniq -c|sed ’s/[^a-zA-Z]//g”
          do
                  groupadd $x &> /dev/null
          done
          #back message
          if (($?==0))
          then
                  echo “Group Ok!!”
          else
              exit 1
          fi
          #user add
          for i in ‘awk ‘{print $1}’ user.list’
          do
              for y in ‘awk ‘{print $2}’ password.list’
              do
              useradd $i &> /dev/null
              echo $y | passwd –stdin $i &> /dev/null
              done
          done
          #back message
          if (($?==0))
          then
              echo “User Ok!”
          else
              exit 1
          fi
          #add users to groups
          for ((q=1;q<=3;q++))
          do
              usermod -G ‘awk “NR==$q {print $2}” user.list | awk ‘{print $2}” ‘awk “NR==$q {print $1}” user.list | awk ‘{print $1}” &> /dev/null
          done
          if (($?==0))
          then
              echo “All Finished!”
          fi
          原文地址http://www.zhangyiqun.cn/115.html

          22.比較兩個小數大小。
          awk -v num1=6.6 -v num2=5.5 'BEGIN{print(num1>num2)?"0":"1"}'
          echo "0.14 > 0.15" | bc
          expr 1.2 \< 1.3

          主站蜘蛛池模板: 广南县| 盘山县| 漳平市| 马边| 嘉善县| 眉山市| 军事| 葵青区| 德清县| 成都市| 拉萨市| 柳州市| 会泽县| 冀州市| 邯郸县| 宝山区| 通州市| 贵南县| 曲松县| 临澧县| 邹城市| 鸡东县| 腾冲县| 高青县| 乌拉特后旗| 东城区| 合山市| 大庆市| 四川省| 丽水市| 礼泉县| 抚远县| 应城市| 澄江县| 温宿县| 吕梁市| 温州市| 忻城县| 若尔盖县| 攀枝花市| 阿拉尔市|