shell腳本(1)

      今天小編爲大家講的是shell腳本,這一塊在我們Linux佔了很大的分量,小編想了好久,還是覺的用練習題來講述更具有說服力,小編會把每個解題的亮點與重點指出來。

1、編寫腳本/root/bin/createuser.sh,實現如下功能:使用一個用戶名做爲參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;並生成8位隨機口令並存在一個文件中,初步提示改口令,顯示添加的用戶的id號等信息

 read -p "input user:   "  user                                                                          

 if id $user &>/dev/null ;then

       echo "$user is exist,the info is `id $user`"

  else

   useradd $user&& echo "123"|passwd --stdin $user &&echo "useradd is successful and passwd update,and the info is `id $user` "

 fi

解題亮點:先用id進行判斷比先判斷用戶是否存在更簡潔,逆向思維。

2、編寫腳本/root/bin/yesorno.sh,提示用戶輸入yesno,並判斷用戶輸入的是yes還是no,或是其它信息

  read -p "yuema ?yes or no:  " ANS

 ans=`echo $ANS|tr 'A-Z' 'a-z' `

  case $ans in

 y|yes)

     echo "see you Now."

      ;;

  n|no)

      echo "bye bye"

      ;;

 *)

      echo  "error input"

      ;;

 esac 

解題亮點:ans=`echo $ANS|tr 'A-Z' 'a-z' `  用tr進行大寫轉換成小寫,這會讓下面的case命令的選項更簡潔

3、編寫腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,顯示其文件類型(普通,目錄,鏈接,其它文件類型)

 read -p "input file: " file1

  n=` ls -l $file1|cut -c1 `                                                                               

  case $n in

  -)

    echo "this is 常規文件"

     ;;

  d)

    echo "this is 目錄文件"

     ;;

 c)

    echo "this is 字符設備文件"

     ;;

  b)

    echo "this is 塊設備文件"

    ;;

 l)

    echo "this is 符號鏈接文件"

   ;;

 p)

    echo "this is 管道文件"

   ;;

  s)

    echo "this is 套接字文件"

    ;;

  *)

     echo "input wrong"

     ;;

  esac

此題重點在於把文件類型的記憶


4、編寫腳本/root/bin/checkint.sh,判斷用戶輸入的參數是否爲正整數

  read -p "input int: " num

     echo  $num|grep "[^0-9]" && echo "是非正整數"|| echo "$num 是個正整數"

此題重點:利用grep對數字進行過濾(主要過濾正負號和點)

5、添加10個用戶user1-user10,密碼爲8位隨機字符

  >/app/userinfo.txt                                                                                      

  for i in {1..10};do

      pwd=`tr -dc 'A-Za-z0-9'</dev/urandom|head -c8`

      useradd user$i

     echo user$i:$pwd|chpasswd

     echo "user$i user$i$pwd" >> /app/userinfo.txt

      done

重點在於怎麼把密碼寫在腳本里,這個在以後的文章也會講


6/etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別讀取每個文件,以K開頭的輸出爲文件加stop,以S開頭的輸出爲文件名加start,如K34filename stop S66filename start

  for i in `ls /etc/rc.d/rc3.d` ;do

    n1=`echo $i|cut -c1`

     case $n1 in

         K)

             echo -e ${i}stop

             ;;

        S)

             echo -e ${i}start                                                                           

            ;;

         *)

              echo "unkown"

              ;;

     esac

   done

重點在於${i}stop中的{},忘記的話,特別容易出錯

7、編寫腳本,提示輸入正整數n的值,計算1+2+…+n的總和

 read -p "input n: " n

 sum=0

 for i in $(seq $n);do

   sum=$[sum + i]                                                                                       

  done

   echo " 1 $n 的和爲: $sum"

重點在於$n不能用於{  }裏,這就讓for循環容易出錯,但是,我們可以用seq代替

8、打印九九乘法表

for i in {1..9} ; do

        for j in `seq 1 $i`; do

            echo -n "$i*$j=$[ i*j ]  "

        done

echo

done

重點同上for j in `seq 1 $i`

9、打印等腰三角形

  read -p "input n: " n

  for i in $(seq $n);do

    for j in $(seq $[n-i]);do

        echo -en " "

   done

    for k in $(seq $[2*i-1]);do                                                                           

         echo -en  "*"

    done

    echo

  done

重點在於: 空格數=總行數-當前行;*數=2n-1

10、編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這個10數字,並顯示其中的最大值和最小值

  > /app/a.txt

  j=1

 while [ $j -le 10 ];do

    echo $[$[RANDOM%9]+1] |tee -a /app/a.txt

     let j++

  done

 min=`sort -n /app/a.txt| head -1`

  max=`sort -n /app/a.txt|tail -1`                                                                        

 echo "min: " $min

 echo "max: " $max

亮點在於:用tee把隨機數重定向到a.txt中,這樣對它進行排序首行就是最小值,尾行就是最大值,會是代碼簡潔


11、編寫腳本,實現打印國際象棋棋盤

y="\033[1;43m  \033[0m"

  R="\033[1;41m  \033[0m"

  for i in {1..8};do

      if [ $[i%2] -eq 0 ];then

          for j in {1..4};do

          echo -en "$y$R"

           done

      else

         for j in {1..4};do

           echo -en "$R$y"                                                                                

          done

      fi

    echo   

  done

用變量y R對顏色進行定義會使下面的調用更具有調理性

好了今天小編先說這11道,剩下的待小編整理好一起講講


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章