linux Shell學習筆記第三天

來源:互聯網
上載者:User

第三天:條件選擇

大 綱

應用執行個體分析

條件測試

if…else…fi

case…in…esac

實現功能菜單

執行指令碼後

按1,顯示目前時間

按2,顯示CPU負載

按3,顯示剩餘記憶體

按0,退出指令碼

按其他字元,提示超出選擇範圍後退出

分析步驟。

#date +%T

uptime awk截取

free –m

條件測試格式

#test –option obj

#[ -option obj ]

返回結果

  1. 運算式內容測試結果是真的
  2. 運算式內容測試結果是假的

測試的對象分類

執行結果(執行成功或失敗)

檔案(檔案是否存在等)

文本(是否一致)

數字(數值比較)

條件測試的選項

選項 作用
-d 目錄
-e 是否存在
-f 是否是普通檔案
-s 檔案大小是否等於0
-r 是否可讀
-w 是否可寫
-x 是否可執行

邏輯操作符號

選項

作用

-a

與操作

-o

或操作

!

非操作

執行個體:

#test –e /etc/passwd –a –e /etc/shadow 中間是a與操作,則都為0才得0

#test –e /etc/passwd –o –e /etc/groups 中間是o或操作,則有一真則真0

字串操作符

== 兩個字串相等

!= 兩個字串不相等

-z Null 字元串

-n 非Null 字元串

執行個體:

#test –z $LOGNAME

#echo $LOGNAME

#echo $?

數值比較操作符

符號

說明

-eq

等於

-ne

不等於

-gt

大於

-lt

小於

-ge

大於等於

-le

小於等於

if…else…fi 條件選擇

if控制結構的基本格式:

if條件 #判斷開始 可以是命令,也可以是test語句

then #如果條件為真 反值真0則執行

命令1 #執行命令1

else #如果條件為假 反值假1則執行

命令2 #執行命令2

fi #判斷結束

執行個體(if…else…fi)1

inputtest.sh

#!/bin/bash

#input test

echo –n “Enter your name:”

read name

#did the user just hit return

if [ "${name}" == "" ]

then

echo “You did not enter any information”

else

echo “Your name: ${name}”

fi

執行個體(if…else…fi)2

filecopy.sh

#!/bin/bash

#file copy

if cp /etc/passwd passwd.bak 2>/dev/null 2>/dev/null 丟掉錯誤提示

then

echo “Good Copy!”

else

echo “`basename $0`: error,could not copy”

fi

if…else…fi的嵌套 (兩層的嵌套)

if 條件1;then

if 條件2;then

命令1

else

命令2

else

if條件3;then

命令3

else

命令4

fi

case…in…esac條件選擇 (比較靈活的方式)

case語句多用於較多分支判斷

case格式: (多種模式,只匹配和variable相等的模式)

case variable in

模式1)命令1…;;

模式2)命令2…;;

esac

匹配模式

* 匹配任一字元

? 匹配任意單字元

[] 匹配字元範圍

case…in.esac執行個體1

#!/bin/bash

#case select

echo –n “enter a number from 1 to 5:”

read NUM

case $NUM in

1) echo “you select 1″ ;;

2) echo “you select 2″ ;;

3) echo “you select 3″ ;;

4) echo “you select 4″ ;;

5) echo “you select 5″ ;;

*) echo “basename $This is not between 1 and 5″

esac

case…in.esac執行個體2

題目是:學生的考試成績是0-100分,在85以上的要提示you are the best!,在70-84顯示you get a good mark! ,在60-74的顯示come on!,60分以下顯示You must study hard!

#!/bin/bash

echo –n “please input your mark:”

read mark

case $mark in

100|9[0-9]|8[5-9]) echo “you are the best!”;; 100、90-99、85-89

8[0-4]|7[0-9]) echo “you get a good mark!”;; 80-84、70-79

7[0-4]|6[0-9]) echo “come on!”;; 70-74、60-69

[0-5][0-9]) echo “You must study hard!”;; 00-59

esac

解決今天的問題

使用if…else…fi的方式對輸入的變數進行判斷。

在每個判斷的分支上執行相應的語句。

menu.sh

#!/bin/bash

clear

echo “——————–menu—————–”

echo “1) Show Time”

echo “2) CPU load”

echo “3) Memory free”

echo “0) Exit”

echo “——————————————–”

echo -n “Enter you chose [0-3]:”

read NUM

if [ ${NUM} -lt 0 -o ${NUM} -gt 3 ]

then

echo “This is not between 0-3.”

else

if [ "${NUM}" == "1" ]

then

echo “`date +%T`”

else

if [ "${NUM}" == "2" ]

then

echo “`uptime | awk -F ‘[,:]‘ ‘{print $7}'`”

else

if [ "${NUM}" == "3" ]

then

echo “`free -m | awk ‘$1==”Mem:”{print $4}'`”

else

exit

fi

fi

fi

fi

本節課回顧:

條件測試的類型

檔案測試

文本測試

數值測試

邏輯測試

if…else…fi條件選擇結構

case…in…esac

課後測試

1、修改menu.sh 採用非菜單式,參數傳遞方式來進行選擇。 例如 #./menu.sh 1 輸出時間

2、使用case方式來實現該菜單選擇方式

Sudu答案:(難免會有錯誤,但是可以實現成功)

1、修改menu.sh後得出

#!/bin/bash

if [ $1 -lt 0 -o $1 -gt 3 ]

then

echo “This is not between 0-3.”

else

if [ "$1" == "1" ]

then

echo “`date +%T`”

else

if [ "$1" == "2" ]

then

echo “`uptime | awk -F ‘[,:]‘ ‘{print $7}'`”

else

if [ "$1" == "3" ]

then

echo “`free -m | awk ‘$1==”Mem:”{print $4}'`”

else

exit

fi

fi

fi

fi

2、 #!/bin/bash

clear

echo “——————–menu—————–”

echo “1) Show Time”

echo “2) CPU load”

echo “3) Memory free”

echo “0) Exit”

echo “——————————————–”

echo -n “Enter you chose [0-3]:”

read NUM

case $NUM in

1) date +%T;;

2) uptime | awk -F ‘[,:]‘ ‘{print $7}';;

3) free -m | awk ‘$1==”Mem:”{print $4}';;

0) exit ;;

*) echo “This is not between 0-3.” ;;

esac

今天收穫還是比較多的。 半個小時的教程看了將近3個小時。

雖然說if…else…fi比較容易理解,但是用case感覺簡單很多,呵呵,看個人喜好吧。

每天看來看一節教程就足夠了。 看多了頭也會暈的。 呵呵。 繼續學習吧~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.