天天看點

shell腳本例子集錦

練習一:寫一個腳本

      1.設定變量FILE的值為/etc/passwd

      2.依次向/etc/passwd中的每個使用者問好,并且說出對方的ID是什麼

       形如:(提示:LINE=`wc -l /etc/passwd | cut -d" " -f1`)

        Hello,root,your UID is 0.

      3.統計一個有多少個使用者

    答案一:#!/bin/bash

          file="/etc/passwd"

          LINES=`wc -l $file | cut -d" " -f1`

          for I in `seq 1 $LINES`;do

          userid=`head -$I $file | tail -1 |cut -d: -f3`

          username=`head -$I $file | tail -1 |cut -d: -f1`

          echo "hello $username,your UID is $userid"

          done

          echo "there are $LINES users"

    答案二:#!/bin/bash

          file=/etc/passwd

          let num=0

          for I in `cat $file`;do

          username=`echo "$I" | cut -d: -f1`

          userid=`echo "$I" | cut -d: -f3`

          echo "Hello,$username,your UID is $userid"

          num=$[$num+1]

          done

          echo "there are $num users"

練習二:寫一個腳本

     1.切換工作目錄至/var

     2.依次向/var目錄中的每個檔案或子目錄問好,形如:

       (提示:for FILE in /var/*;或for FILE in `ls /var`;)

       Hello,log

     3.統計/var目錄下共有多個檔案,并顯示出來

  答案:#!/bin/bash

        cd /var

        let num=0

        for I in `ls /var/*`;do

        echo "hello $I"

        num=$[$num+1]

        done

        echo "the number of files is $num"

練習三:寫一個腳本

     1.設定變量file的值為/etc/passwd

     2.使用循環讀取檔案/etc/passwd的第2,4,6,10,13,15行,并顯示其内容

     3.把這些行儲存至/tmp/mypasswd檔案中

  答案:#!/bin/bash

      file="/etc/passwd"

      for I in 2 4 6 10 13 15;do

      exec 3>/tmp/mypasswd

      line=`head -$I $file | tail -1`

      echo "$line"

      echo "$line" >&3

      exec 3>&-

      done

練習四:寫一個腳本

       傳遞兩個整數給腳本,讓腳本分别計算并顯示這兩個整數的和,差,積,商

        答案如下:vimtest.sh

                  #!/bin/bash

                   echo "first number $1"  (表示輸出第一個數)

                    echo"second number $2" (表示輸出第二個數)

                    echo"$(($1+$2))"     (輸出兩數之和)

                    echo"$[$1-$2]"        (輸出兩數之差)

                   echo"$[$1*$2]"        (輸出兩數之積)

                    echo"$[$1/$2]"        (輸出兩數之商)

                   :wq                   (表示儲存并退出vi編輯器)

                   chmod +xtest.sh      (給test.sh執行的權限)

                   ./test.sh 23         (傳遞兩個參數并執行腳本     

作業一:寫一個腳本:

      1.建立目錄/tmp/scripts

      2.切換工作目錄至此目錄中

      3.複制/etc/pam.d目錄至目前目錄,并重命名為test

       4.将目前目錄的test及其裡面的檔案和子目錄的屬主改為redhat

      5.将test及其子目錄中的檔案的其它使用者的權限改為沒有任何權限

   答案:

      #!/bin/bash

       mkdir-v /tmp/scripts

      cd /tmp/scripts

      cp -r /etc/pam.d ./test

      chown -R redhat ./test

      chmod -R o=--- ./test

作業二:寫一個腳本

      1.顯示目前系統日期和時間,而後建立目錄/tmp/lstest

       2.切換工作目錄至/tmp/lstest

      3.建立目錄a1d,b56e,6test

      4.建立空檔案xy,x2y,732

      5.列出目前目錄下以a,x或者6開頭的檔案或目錄

      6.列出目前目錄下以字母開頭,後跟一個任意數字,而後跟任意長度字元的檔案或目錄

   答案:

      #!/bin/bash

       date

       mkdir-pv /tmp/lstest

      cd /tmp/lstest

       mkdira1d b56e 6test

       touchxy x2y 732

      ls [ax6]*

      ls [[:alpha:]][[:digit:]]*

作業三:寫一個腳本

       添加10個使用者user1到user10,但要求隻有使用者不存在的情況下才能添加

  答案:

      #!/bin/bash

      for I in `seq 1 10`;do

      cut -d: -f1 /etc/passwd |grep "user$I"2>>/tmp/etc.err || useradduser$I

      done

作業四:寫一個腳本

      通過ping指令測試192.168.0.151到192.168.0.254之間的所有主機是否線上

      如果線上,就顯示“ip is up”

      如果不線上,就顯示“ip is down”

      答案:#!/bin/bash

      for I in `seq 151 254`;do

      ping -c1 -w1 192.168.0.$I&>/dev/null&& echo "192.168.0.$I is up"||       echo "192.168.0.$I is down"

      done