bash編程初體驗(二)
-
read
-
if
-
case
概述
在本篇文章中,我們將介紹bash編程中有關if語句的簡單用法,if語句的基本思路是判斷給定的條件是否滿足,即結果是真還是假,從而選擇執行哪種操作。如此,如果條件為真,if會執行一種指令,如果條件為假,if會選擇執行另一種指令,這種執行就是所謂的選擇結構,它能夠改變命令的基本順序流結構,以選擇流的形式運行。
在有關if語句的論述中,我們還將介紹read命令,因為read命令可以方便地引入一個或多個變量,可以天然地與if語句結合;另外,除了if語句,還有一種常見的選擇語句:case語句,其簡單易用,高效簡潔,是在一組可能的值中評估一個或多個變量時的不二選擇。當然,case語句可以與if語句嵌套。
read
主要用途
讀取變量
Read a line from the standard input and split it into fields.
read命令可以一次讀取一個或多個變量的值,變量和輸入的值都需要空格隔開;如果沒有指定變量名,讀取的變量將被自動賦值給特定的變量REPLY.
常用選項
-
-p: 指定讀取值時的提示符
-
-t: 指定讀取值時等待的時間,以秒為單位
-
-r: 允許輸入包含反斜杠
-
-n #: 從輸入中讀取#個字符,不需要按回車讀取
-
-d: 指定結束定界符
使用示例
[root@centos7 ~#]read -p "please input a word:" Key
[root@centos7 ~#]read -t 3 Key
[root@centos7 ~#]read -r KeyI love you \
[root@centos7 ~#]read -n 5 K
[root@centos7 ~#]read -d":" Key
if
if是一種結構化語句,bash shell中的if語句運行在if行定義的命令,如果命令的退出狀態碼為0,將執行then后的所有命令,如果命令的退出狀態碼為其它值,則不會執行then后的語句,而是直接跳到下一條語句。
if語句簡介:
單分支#!/bin/bash #if COMMANDthen COMMANDSfi--------------------------------------------------------------------------- 雙分支#!/bin/bash#if COMMANDthen COMMANDSelse COMMANDSfi-------------------------------------------------------------------------- 多分支#!/bin/bash#if COMMANDthen COMMANDSelif COMMANDSelif COMMANDSelse COMMANDSfi
case語句
case語句,適用于某種條件判斷,如在一組數據中評估一個或多個變量的值。case支持glog風格的通配符,
*: 任意長度任意字符 ?: 任意單個字符 []: 指定范圍內的任意單個字符 a|b: a或b
case語句簡介:
case 變量引用 in PART1) 分支1 ;; PART2) 分支2 ;; PART3) 分支3 ;; ... *) 默認分支 ;; esac
練習
1.寫一個腳本/root/bin/createuser.sh,實現如下功能:使用一個用戶名做為參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id號等信息。
[root@centos7 ~/bin#]vim createuser.sh 1 #!/bin/bash 2 # 3 # Add a user:以用戶名為參數,存在即顯示其存在,不存在則添加,并顯示其id等信息 4 if [ $# -lt 1 ] # 符合條件則執行then,否則執行else 5 then 6 echo "please input one USERNAME: $0 USERNAME" 7 exit 1 8 else 9 id $1 &> /dev/null # 符合條件則進行下一個if判斷,此處為if嵌套 10 if [ $? -eq 0 ]; then 11 echo "The user is exist." 12 elif [ $? -ne 0 ]; then 13 useradd $1 && echo "add a $1" 14 id $1 15 fi 16 fi # 程序結束
2.寫一個腳本/root/bin/yesorno.sh,提示用戶輸入yes或no,并判斷用戶輸入的是yes還是no,或是其它信息。
1 #!/bin/bash 2 # 3 # 輸入yes or no 并顯示之 4 read -p "please input a yes or no!" KEY # 通過read 引入了變量Key 5 case $KEY in 6 [Yy][Ee][Ss]|[Yy]) # 在一組數值中評估Key變量 7 echo "yes" 8 ;; 9 [Nn][Oo]|[Nn]) 10 echo "no" 11 ;; 12 *) 13 echo "please again" 14 ;; 15 esac
3.寫一個腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,顯示其文件類型(普通,目錄,鏈接,其它文件類型)
1 #!/bin/bash 2 # 3 #判斷文件類型 4 5 if [[ $# -lt 1 ]] 6 then 7 echo "please input a FILENAME: $0 fILENAME" 8 else 9 file -b $1 10 fi ~
if與case的嵌套:
1 #!/bin/bash 2 # 3 # 判斷文件類型 4 5 if [[ $# -lt 1 ]] 6 then 7 echo "please input a FILENAME: $0 FILENAME" 8 else 9 Key=`ls -l $1 |cut -c1` 10 case $Key in # 注意要寫成$Key 而非Key 11 l) 12 echo "link file" 13 ;; 14 -) 15 echo "common file" 16 ;; 17 d) 18 echo "directory file" 19 ;; 20 t) 21 echo "sticky directory" 22 ;; 23 *) 24 echo "other file" 25 ;; 26 esac 27 fi
4.試判斷一個整數
#!/bin/bash # #判斷是否為整數,第4行可簡寫為 let var=$1,然后第11與12行可移到第二個if嵌套 #該腳本對輸入為字母的情況會有錯誤信息輸出,但不影響判斷腳本 #要想解決此問題,可試用grep [[ $# -eq 0 ]] && echo "please input a integer." && exit 1 (int=$(expr $1 + $1)) &> /dev/null if [ $? -eq 0 ]; then if [ $1 -gt 0 ]; then echo "$1 is a positive integer." else echo "$1 is a negative integer." fi elif [ $1 -eq 0 ];then echo "$1 is a 0" else echo "$1 is not a integer." fi
5.寫一個腳本/root/bin/createuser.sh,實現如下功能:使用一個用戶名做為參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id號等信息.
#!/bin/bash # # Add a user:以用戶名為參數,存在即顯示其存在,不存在則添加,并顯示其id等信息 if [ $# -lt 1 ]then echo "please input one USERNAME: $0 USERNAME" exit 1 else id $1 &> /dev/null if [ $? -eq 0 ]; then echo "The user is exist." elif [ $? -ne 0 ]; then useradd $1 && echo "add a $1" id $1 fi fi
6.給出一個系統菜單,打印出硬盤、內存、cpu信息
#!/bin/bash # cat <<EOF disk) show disk info mem) show memory info cpu) show cpu info *) quit EOFread -p "Please input your choice: " choice if [[ "$choice" == 'disk' ]] then fdisk -l elif [[ "$choice" == 'mem' ]] then free -m elif [[ "$choice" == 'cpu' ]] then lscpu else echo "Unknow choice" exit 3 fi
7.判斷用戶類別
#!/bin/bash # [ $# -lt 1 ] && echo "Please input one user: " && exit 1 ! id $1 && echo "No such user." && exit 2 id_user=$(id -u $1) if [ $id_user -eq 0 ] then echo "root" elif [ $id_user -ge 1000 ] then echo "login user" else echo "system user" fi
if語句暫且告一段落!
止戰
2016.8.18
原創文章,作者:Liansir,如若轉載,請注明出處:http://www.www58058.com/37428
文章對if、case語句的語法有了相應的總結和練習,多些,多練,多看優秀代碼。才能寫出優秀的腳本。