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
下一篇 2016-08-19

相關推薦

  • find命令使用練習

    1、  查找/var目錄下屬主為root,且屬組為mail的所有文件   2、  查找/var目錄下不屬于root、lp、gdm的所有文件   3、  查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件   4、  查找當前系統上沒有屬主或屬組,且最…

    Linux干貨 2016-08-15
  • 馬哥教育網絡班21期+第二周課程練習

    Linux上的文件管理類命令都有哪些?其常用的方法及其相關示例。     cp:將源文件或者目錄復制到目標文件或者目錄中。     mv:將文件或目錄重新命名,或者將源文件從源目錄移到目標目錄中。     rm:刪除指定的一個文件或者多個文件或者目錄。       &n…

    Linux干貨 2016-07-16
  • 上海2016全球運維大會 美女辣妹吸引眼球!

    國內第一個運維行業大會 GOPS 2016全球運維大會(上海站)在2016年9月23-24日在上海雅悅新天地大酒店舉辦,面向IT及傳統行業、廣大運維技術人員,傳播先進技術思想和理念,分享業內最佳實踐。 參會兩日,雖然大會主角是運維技術交流學習,不過卻意料之外的邂逅了另一道靚麗的風景,瞬間燃了… 在會場,站立著一群高挑美女,我的…

    2016-12-05
  • 作業——拷貝命令及其鏈接庫

    1),提示用戶輸入一個可執行命令的名稱 2),獲取此命令所依賴額所有庫文件列表 3),復制命令至某目標目錄(/mnt/sysroot,即把此目錄當做根)下的對的路徑中 bash,/bin/bash ===> /mnt/sysroot/bin/bash useradd, /usr/sbin/useradd ===> /mnt/sysroot/usr…

    Linux干貨 2017-02-04
  • linux磁盤管理及其磁盤分區工具的使用

    一、 幾種分區工具: 1.圖形化工具gnome-disks使用簡單,在此不在贅述。 2.fdisk使用: fdisk支持MBR,也支持GPT分區,對于一塊硬盤最多只能理解15個分區,一般使用fdisk做MBR分區,gdisk做GPT分區。下面為fdisk分區示例: [root@centos7 ~]# fdisk /dev/sde…

    Linux干貨 2016-08-29
  • linux基礎知識1

    Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。文件管理工具:cp,mv,rmcp命令:copy源文件:目標文件單源復制:cp [OPTION]… [-T] SOURCE DEST多源復制:cp [OPTION]… SOURCE… DIRECTORYcp [OPTION]… -t DIRECTORY SOURCE…單源復制:如果DES…

    2018-03-12

評論列表(1條)

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

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

欧美性久久久久