腳本編程小結

第一次自己總結寫技術性博客,總結了這麼多天還是不知道怎麼寫,還請大家多多指教 。

 

 shell script 是利用shell的功能所寫的一個“程序”, 這個程序是使用純文本文件,將一些shell的語法與命令寫在裏面,搭配正則表達式、管道命令與數據流重定向等功能,已達到我們所想要的處理目的 。

shell script的作用有 :

    自動化管理 

    跟蹤與管理系統 

    簡單的***檢測 

    連續命令單一化 

    簡單的數據處理 (但是由於shell script的速度較慢,且使用cpu的資源較多 所                     以在處理數據的速度上 不太夠用 )

 

    if、case、for、while、until、條件測試、函數、break、continue、算術運算、命令替換

if ..then 最常見的條件判斷式

1、單層簡單條件判斷式  

  1. if [ 條件判斷 ];then 
  2.       當條件判斷成立時,執行的語句 
  3.  fi 

   example:如果user1 存在 就顯示 exist          

  1. if id user1 &>/dev/null ;then  
  2.     echo "user1 is exist." 
  3. fi 

2、多重複雜條件判斷    

  1. if [ 條件判斷式1 ];then 
  2.    條件判斷式1成立時 執行的語句 
  3. elif [ 條件判斷式2 ];then 
  4.    條件判斷式2成立時 執行的語句 
  5. else 
  6.     當條件12 都不滿足時 執行的語句 
  7. fi  

 

  1. read -p "your choice:" CHOICE 
  2.  
  3. if [[ "CHOICE" = "U" -o  "CHOICE" = "u" ]];then 
  4.     id -u $USERNAME 
  5. elif [[ "CHOICE" = "G" -o  "CHOICE" = "g" ]];then  
  6.       id -g $USERNAME 
  7. elif [[ "CHOICE" = "S" -o  "CHOICE" = "s" ]];then 
  8.     grep "^$USERNAME\>" /etc/passwd | cut -d: -f7 
  9. elif [[ "CHOICE" = "Q" -o  "CHOICE" = "q" ]];then 
  10.      echo "quit" 
  11.      exit 0 
  12. else  
  13.     echo "wrong choice" 
  14. fi 

 case ..esac 判斷  

  1. case $變量名稱 in 
  2.     "第一個變量內容") 
  3.          程序段 ;; 
  4.      "第二個變量內容") 
  5.           程序段;; 
  6.      *) 
  7.           程序段;; 
  8. esac 

example :

  1. read -p "input a username:" USERNAME 
  2. read -p "input you choice :" CHOICE 
  3.    case $CHOICE in  
  4.  
  5.       U|u) 
  6.          id -u $USERNAME;; 
  7.       G|g) 
  8.          id -g $USERNAME;; 
  9.       S|s) 
  10.           grep "^$USERNAME\>:" /etc/passwd |cut -d: -f7;; 
  11.       Q|q) 
  12.           exit;; 
  13.        *) 
  14.           echo "please input a right choice"    
  15.    esac  

for 

    for ..do..done (固定循環,已經知道要循環幾次)

   

  1. for I in con1 con2 con3.. 
  2. do  
  3.    程序段 
  4. done  
  5. 第一次循環 $I 的內容爲 con1 
  6. 第一次循環 $I 的內容爲 con2 
  7. 第一次循環 $I 的內容爲 con3 

 example :添加三個用戶

  1. for USER in user1 user2 user3; do 
  2.     useradd $USER 
  3. done 

 example :計算從1加到100

  1. declare -i SUM=0 
  2. for I in {1..100} 
  3. do  
  4.     SUM=$[$SUM+$I] 
  5. done 
  6. echo $SUM 

example :查看系統上的每一個賬號

  1. users=$(cut -d: -f1 /etc/passwd) #獲取賬號 
  2. for  username in $users ;do 
  3.     id $username 
  4.     finger $username 
  5. done  

while until  都是不定循環  即循環的次數不固定 只要滿足條件 即可

  1. while [條件判斷式];do   # 條件滿足就就循環 不滿足 就退出循環  
  2.      程序段落   
  3. done  
  4.  
  5. until [條件判斷式];do  # 條件不滿足就循環 滿足就退出循環 
  6.       程序段落 
  7. done    

 example:用戶輸入Y或者y 才結束循環 

  1. while [ "$yn" != "y" -a "$yn" != "Y" ];do 
  2.       read -p "please input y|Y to stop this program :" yn 
  3. done  
  4.      echo "ok ! you input the correct answer." 

 

 

  1. until [ "$yn" = "y" -o "$yn" = "Y" ];do  
  2.       read -p "please input y|Y to stop this program :" yn  
  3. done   
  4.      echo "ok ! you input the correct answer."  

 

 條件測試:

   shell提供了對字符串、文件、數值及邏輯操作等內容的條件測試的支持。

    一般有三種格式 :

    [ expression ]  

    ` expression `   使用方括號時,要注意在條件兩邊加上空格

     test expression

判定字符串的數據 
   test -z string  #判斷string 是否爲空 爲空則爲 true 
   test -n string  #判斷string是否不爲空,爲空則爲false
   test str1 = str2 #判斷str1是否等於str2,相等 則爲 true 
   test str1 != str2 #判斷str1是否等於str2,不相等 則爲 true 
 
數值的比較 :
     -eq 相等 -ne不等  -gt大於  -lt小於  -ge大於等於  -le小於等於
文件狀態的測試:
     -e 該文件名是否存在
     -d 該文件名是否存在且爲目錄
      -f 該文件名是否存在且爲文件 
      -b塊設備文件 -c字符設備文件 -s套接字文件 -p管道文件 -L 連接文件 
 
    文件權限的檢測
         -r可讀 -w可寫 -x可執行 -u SUID屬性 -gSGID屬性 -k sticky bit屬性            -s非空白文件 

    兩個文件之間的比較:

         -ef 判斷file1 與file2 是否爲同一個文件,主要意義在於判斷了兩個文             件是否指      向同一個inode 號

          -nt 判斷 file1 是否比file2 新

           -ot    判斷file1 是否比file2 舊

多重條件判斷:

   -a 兩個條件同時成立

   -o  任何一個條件成立

    !   反向狀態 

函數 :最大的功能就是 簡化程序代碼。可以多次調用 

  1. fname(){ 
  2.      程序段 

      example :

  1. #!/bin/bash 
  2. showecho() { 
  3.     echo "How are you?" 
  4.  
  5. for I in {1..10}; do 
  6.   echo $I 
  7.   showecho  函數調用
  8. done 

break結束循環  continue結束本次循環進行下一輪循環

  1. #!/bin/bash  
  2. declare -i I=0 
  3. while true ;do 
  4.   let I++ 
  5.  echo "$I" 
  6.    if [ $I -ge 10 ];then 
  7.        break  $I大於等於10 就退出循環
  8.    else  
  9.        continue  $I 小於10 就進入下一輪循環
  10.    fi 
  11. done 
  12. 結果是 1 2 3 4 5 6 7 8 9 10
     

算數運算 : 

  + - * / % 

  常用方法 : 複製給變量  使用echo 回顯 

  1. #SUM=$[2+3] 
  2. #echo $SUM 
  3. #let SUM=2+4 
  4. #echo $SUM 
  5.  
  6. #SUM=$((2+5)) 
  7. #echo $SUM 
  8.  
  9. #expr 2 + 3  # 直接顯示結果
  10.  
  11. SUM=`expr 2 + 3` 
  12. #echo $SUM 

 判斷奇數偶數     

 

  1. read -p "please input a number :" I 
  2. [ $[$I%2] -eq 0 ] && echo "even " || echo "odd" 

命令替換:

   兩種形式 `COMMAND`  $(COMMAND)

  1. sun=`id -u www` 
  2. # echo $sun 
  3. 508 
  4. sun=$(id -u www) 
  5. # echo $sun 
  6. 508 

       

  

   

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