bash編程初體驗(二)

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.

常用選項

  1. -p: 指定讀取值時的提示符

  2. -t: 指定讀取值時等待的時間,以秒為單位

  3. -r: 允許輸入包含反斜杠

  4. -n #: 從輸入中讀取#個字符,不需要按回車讀取

  5. -d: 指定結束定界符

使用示例

[root@centos7 ~#]read -p "please input a word:" Key

wKiom1e1olLABIsdAABAVrj0Jp8294.png

[root@centos7 ~#]read -t 3 Key

wKioL1e1omex-u1kAAB_UDqrVDk451.png

[root@centos7 ~#]read -r KeyI love you \

wKioL1e1on6QWhwiAAB6-DUgylk958.png

[root@centos7 ~#]read -n 5 K

wKiom1e1opngw-WHAADzfyaS2k0074.png

[root@centos7 ~#]read -d":" Key

wKioL1e1or_zQsYBAABTTpnxRN8026.png


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   # 程序結束

wKioL1e1o6TC5oGrAABkNsjLiD8984.png

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

wKiom1e1o_Gx5frWAAB2A0m4sPM847.png

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
~

wKioL1e1pBWz70AaAADpHuOrErg092.png

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

wKioL1e1pFjBvNvcAABHe_FONu4276.png

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

wKioL1e1pTKyOOYJAADDhqRcptY279.png

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

wKiom1e1pZXg22FmAABqKvA3PGw170.png

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

wKioL1e1pz6yjqYRAACPm2vQxXY726.png

if語句暫且告一段落!

止戰

2016.8.18

原創文章,作者:Liansir,如若轉載,請注明出處:http://www.www58058.com/37428

(0)
LiansirLiansir
上一篇 2016-08-19 08:36
下一篇 2016-08-19 08:36

相關推薦

  • 學習宣言

    好好學習,天天向上。

    Linux干貨 2016-10-24
  • Linux文件類型及顏色標識

    查看文件類型:      指令:ll 文件名或目錄名      –  白色 普通文件(可執行文件)      l  擴寫:sysbolic link 淡藍色 符號鏈接文件   &…

    Linux干貨 2016-10-18
  • Shell腳本編程之入門基礎(一)

    Shell腳本編程   一、本章節一內容:    編程基礎    腳本基本格式    變量    運算    條件測試   在本章節開始之前,我們先回顧下前面的知識點內容。前面學習了Linux的基礎入門,了解到計算機是運行二進制指令的,而我…

    Linux干貨 2016-08-12
  • 第1周-1:計算機的組成及其功能以及部分常見Linux發行版簡介

    一、計算機的組成及其功能: 計算機主要由硬件部分和軟件部分組成。 1、硬件部分 (1)中央處理器 由控制器和運算器兩大部分組成,是計算機的大腦,硬件部分里最關鍵的部分。決定著整個計算機系統的性能。 控制器負責協調計算機硬件的其他部分同步工作,對其他的硬件進行發號施令。是計算機系統的司令。控制器從存儲器中讀取指令,分析指令的含義,要完成什么操作,需要什么數據,…

    Linux干貨 2016-11-01
  • sed vim小練

     1 、刪除/etc/grub2.conf 文件中所有以空白開頭的行行首的空白字符  2 、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空 白字符的行的行首的#和空白字符 3 、在/root/install.log 每一行行首增加# [root@localhost ~]# sed -n&nbsp…

    Linux干貨 2016-08-12

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 13:54

    文章對if、case語句的語法有了相應的總結和練習,多些,多練,多看優秀代碼。才能寫出優秀的腳本。

欧美性久久久久