第一次自己總結寫技術性博客,總結了這麼多天還是不知道怎麼寫,還請大家多多指教 。
shell script 是利用shell的功能所寫的一個“程序”, 這個程序是使用純文本文件,將一些shell的語法與命令寫在裏面,搭配正則表達式、管道命令與數據流重定向等功能,已達到我們所想要的處理目的 。
shell script的作用有 :
自動化管理
跟蹤與管理系統
簡單的***檢測
連續命令單一化
簡單的數據處理 (但是由於shell script的速度較慢,且使用cpu的資源較多 所 以在處理數據的速度上 不太夠用 )
if、case、for、while、until、條件測試、函數、break、continue、算術運算、命令替換
if ..then 最常見的條件判斷式
1、單層簡單條件判斷式
- if [ 條件判斷 ];then
- 當條件判斷成立時,執行的語句
- fi
example:如果user1 存在 就顯示 exist
- if id user1 &>/dev/null ;then
- echo "user1 is exist."
- fi
2、多重複雜條件判斷
- if [ 條件判斷式1 ];then
- 條件判斷式1成立時 執行的語句
- elif [ 條件判斷式2 ];then
- 條件判斷式2成立時 執行的語句
- else
- 當條件12 都不滿足時 執行的語句
- fi
- read -p "your choice:" CHOICE
- if [[ "CHOICE" = "U" -o "CHOICE" = "u" ]];then
- id -u $USERNAME
- elif [[ "CHOICE" = "G" -o "CHOICE" = "g" ]];then
- id -g $USERNAME
- elif [[ "CHOICE" = "S" -o "CHOICE" = "s" ]];then
- grep "^$USERNAME\>" /etc/passwd | cut -d: -f7
- elif [[ "CHOICE" = "Q" -o "CHOICE" = "q" ]];then
- echo "quit"
- exit 0
- else
- echo "wrong choice"
- fi
case ..esac 判斷
- case $變量名稱 in
- "第一個變量內容")
- 程序段 ;;
- "第二個變量內容")
- 程序段;;
- *)
- 程序段;;
- esac
example :
- read -p "input a username:" USERNAME
- read -p "input you choice :" CHOICE
- case $CHOICE in
- U|u)
- id -u $USERNAME;;
- G|g)
- id -g $USERNAME;;
- S|s)
- grep "^$USERNAME\>:" /etc/passwd |cut -d: -f7;;
- Q|q)
- exit;;
- *)
- echo "please input a right choice"
- esac
for
for ..do..done (固定循環,已經知道要循環幾次)
- for I in con1 con2 con3..
- do
- 程序段
- done
- 第一次循環 $I 的內容爲 con1
- 第一次循環 $I 的內容爲 con2
- 第一次循環 $I 的內容爲 con3
example :添加三個用戶
- for USER in user1 user2 user3; do
- useradd $USER
- done
example :計算從1加到100
- declare -i SUM=0
- for I in {1..100}
- do
- SUM=$[$SUM+$I]
- done
- echo $SUM
example :查看系統上的每一個賬號
- users=$(cut -d: -f1 /etc/passwd) #獲取賬號
- for username in $users ;do
- id $username
- finger $username
- done
while until 都是不定循環 即循環的次數不固定 只要滿足條件 即可
- while [條件判斷式];do # 條件滿足就就循環 不滿足 就退出循環
- 程序段落
- done
- until [條件判斷式];do # 條件不滿足就循環 滿足就退出循環
- 程序段落
- done
example:用戶輸入Y或者y 才結束循環
- while [ "$yn" != "y" -a "$yn" != "Y" ];do
- read -p "please input y|Y to stop this program :" yn
- done
- echo "ok ! you input the correct answer."
- until [ "$yn" = "y" -o "$yn" = "Y" ];do
- read -p "please input y|Y to stop this program :" yn
- done
- echo "ok ! you input the correct answer."
條件測試:
shell提供了對字符串、文件、數值及邏輯操作等內容的條件測試的支持。
一般有三種格式 :
[ expression ]
` expression ` 使用方括號時,要注意在條件兩邊加上空格
test expression
兩個文件之間的比較:
-ef 判斷file1 與file2 是否爲同一個文件,主要意義在於判斷了兩個文 件是否指 向同一個inode 號
-nt 判斷 file1 是否比file2 新
-ot 判斷file1 是否比file2 舊
多重條件判斷:
-a 兩個條件同時成立
-o 任何一個條件成立
! 反向狀態
函數 :最大的功能就是 簡化程序代碼。可以多次調用
- fname(){
- 程序段
- }
example :
- #!/bin/bash
- #
- showecho() {
- echo "How are you?"
- }
- for I in {1..10}; do
- echo $I
- showecho 函數調用
- done
break結束循環 continue結束本次循環進行下一輪循環
- #!/bin/bash
- declare -i I=0
- while true ;do
- let I++
- echo "$I"
- if [ $I -ge 10 ];then
- break $I大於等於10 就退出循環
- else
- continue $I 小於10 就進入下一輪循環
- fi
- done
- 結果是 1 2 3 4 5 6 7 8 9 10
算數運算 :
+ - * / %
常用方法 : 複製給變量 使用echo 回顯
- #SUM=$[2+3]
- #echo $SUM
- 5
- #let SUM=2+4
- #echo $SUM
- #SUM=$((2+5))
- #echo $SUM
- #expr 2 + 3 # 直接顯示結果
- 5
- SUM=`expr 2 + 3`
- #echo $SUM
判斷奇數偶數
- read -p "please input a number :" I
- [ $[$I%2] -eq 0 ] && echo "even " || echo "odd"
命令替換:
兩種形式 `COMMAND` $(COMMAND)
- sun=`id -u www`
- # echo $sun
- 508
- # sun=$(id -u www)
- # echo $sun
- 508