1. 程式人生 > >linux基礎之shell程式設計(2)-條件判斷,算數運算,測試

linux基礎之shell程式設計(2)-條件判斷,算數運算,測試

bash中如果實現條件判斷?

條件測試型別

  • 整數測試
  • 字元測試
  • 檔案測試

條件測試的表示式

有三種

[ expression ]  --方括號與表示式之間一定要有一個空格
[[ expression ]] 
test expression

整數測試

-eq: 測試兩個整數是否相等  例:$A -eq $B
-ne: 測試兩個整數是否不等  不等為真,相等為假
-gt: 測試一個數是否大於另一個數;大於,為真;否則,為假;
-lt: 測試一個數是否小於另一個數;小於,為真;否則,為假;
-ge: 大於或等於
-le: 小於或等於

命令的間邏輯關係

邏輯與: &&
    第一個條件為假時,第二條件不用再判斷;
    第一個條件為真時,第二條件必須得判斷;
邏輯或: ||
    第一個條件為假時,第二條件必須得判斷;
    第一個條件為真時,第二條件不用再判斷;

例:比較兩個數大小

[root@iZ28g26851kZ ~]# A=12
[root@iZ28g26851kZ ~]# B=15
[root@iZ28g26851kZ ~]# [ $A -gt $B ] && echo "A比較大" || echo "B比較大"
B比較大
[root@iZ28g26851kZ ~]# A=20
[root@iZ28g26851kZ ~]# [ $A -gt $B ] && echo "A比較大" || echo "B比較大" A比較大 [root@iZ28g26851kZ ~]#

如果A大於B則[ $A -gt $B ] 為真,需要執行(判斷)echo "A比較大"
最終[ $A -gt $B ] && echo "A比較大" 為真,所以不用再執行echo "B比較大"

if語句

——–單分支

if 判斷條件 ;then
    statement1
    ...
fi

——–雙分支

if 判斷條件 ;then
    statement1
    ...
else statement2 ... fi

——–多分支

if 判斷條件 ;then
    statement1
    ...
elif 判斷條件2 ; then
    statement2
    ...
elif 判斷條件3 ; then
    statement3
    ...
else
    statement4
    ...
fi

例:判斷使用者user1是否存在,存在顯示使用者已存在,不存在則建立使用者,密碼和使用者名稱相同

adduser.sh

#!/bin/bash
NAME=user1
if id $NAME &> /dev/null; then
   echo "使用者已存在"
else
   echo "當前一共有使用者`wc -l /etc/passwd | cut -d" " -f1`人"
   echo "使用者不存在,正在建立使用者"
   useradd $NAME
   echo $NAME | passwd --stdin $NAME &> /dev/null
   echo "當前一共有使用者`wc -l /etc/passwd | cut -d" " -f1`人"
fi

執行結果

[root@iZ28g26851kZ ~]# ./adduser.sh 
當前一共有使用者30人
使用者不存在,正在建立使用者
當前一共有使用者31人
[root@iZ28g26851kZ ~]# ./adduser.sh 
使用者已存在
[root@iZ28g26851kZ ~]# 

算數運算

之前說了,shell中預設所有變數都是字串,所以要進行算數運算就必須用命令處理

let

let 算數運算表示式
例:

[root@iZ28g26851kZ ~]# b=23
[root@iZ28g26851kZ ~]# a=12
[root@iZ28g26851kZ ~]# let c=$a+$b
[root@iZ28g26851kZ ~]# echo $c
35
[root@iZ28g26851kZ ~]# 

$[算數運算表示式]

例:

[root@iZ28g26851kZ ~]# c=$[$a+$b*2]
[root@iZ28g26851kZ ~]# echo $c
58
[root@iZ28g26851kZ ~]# 

$((算數運算表示式))

例:

[root@iZ28g26851kZ ~]# c=$(($a*2+$b*2))
[root@iZ28g26851kZ ~]# echo $c
70
[root@iZ28g26851kZ ~]# 

expr

expr 一般用於整數運算,會自動取整,小數點後面的直接去掉
且 運算數與運算子號之間一個要有一個空格,如果沒有空格就會像下面這樣

[root@iZ28g26851kZ ~]# expr 10/3
10/3
[root@iZ28g26851kZ ~]# 

原樣輸出了,,所以必須要加上空格
例:

[root@iZ28g26851kZ ~]# expr 10 / 3
3
[root@iZ28g26851kZ ~]# expr 10 + 3
13
[root@iZ28g26851kZ ~]# expr 10 - 3
7
[root@iZ28g26851kZ ~]# expr 10 * 3
expr: syntax error

可以看出,加,減,除,都沒有問題,唯獨乘法運算時居然說語法錯誤,
好吧,這裡expr應該是吧 * 當匹配字元用了,所以需要轉義一下

[root@iZ28g26851kZ ~]# expr 10 \* 3
30

ok,這樣就搞定了

檔案測試

-e FILE: 測試檔案是否存在
-f FILE: 測試檔案是否為普通檔案
-d FILE: 測試指定路徑是否為目錄
-r FILE: 測試當前使用者對指定檔案是否有讀取許可權
-w FILE: 測試當前使用者對指定檔案是否有寫入許可權
-x FILE: 測試當前使用者對指定檔案是否有執行許可權

例:判斷一個檔案是否存在,存在則顯示其行數

#!/bin/bash
FILENAME=/etc/passwd
if [ -e $FILENAME ]; then
   echo "檔案存在"
   echo "檔案一共有` wc -l $FILENAME | cut -d" " -f1`行"
else
   echo "檔案不存在"
fi

如何中途退出指令碼

在需要退出的地方使用exit #即可,#號為一個退出狀態(0-255的一個數值)。

0:表示指令碼執行成功
1-255:表示執行失敗
也可以什麼都不返回,指令碼會預設返回上一條結果的執行狀態

例:
exittest.sh

#!/bin/bash
echo "第一行"
echo "第二行"
exit 18
echo "第三行"

執行結果

[root@iZ28g26851kZ ~]# ./exittest.sh 
第一行
第二行
[root@iZ28g26851kZ ~]# echo $?
18
[root@iZ28g26851kZ ~]# 

顯示執行指令碼的過程

有些時候,當指令碼太長,出錯之後無法快速找到原因,可以使用 bash -x xxx.sh來執行指令碼,該命令可將指令碼執行的過程顯示出來
例:判斷檔案是否存在

filetest.sh

#!/bin/bash
#
FILENAME=/etc/passwd
if [ -e $FILENAME ];then
  echo "檔案存在"
else
  echo "檔案不存在"
fi

執行

[[email protected] ~]# bash -x filetest.sh 
+ FILENAME=/etc/passwd
+ '[' -e /etc/passwd ']'
+ echo $'\346\226\207\344\273\266\345\255\230\345\234\250'
檔案存在
[[email protected] ~]# 

這樣就可以很方便的檢查指令碼了

字元測試

相等比較

[ string == string ]

記住,[空格string空格==空格string空格]
少一個都不行哦~~
例:

[root@iZ28g26851kZ ~]# [ "asd" == "asdd" ]
[root@iZ28g26851kZ ~]# echo $?
1
[root@iZ28g26851kZ ~]# [ "asd" == "asd" ]
[root@iZ28g26851kZ ~]# echo $?
0
[root@iZ28g26851kZ ~]# 

不等比較

[ string != string ]

例:

[root@iZ28g26851kZ ~]# [ "asd" != "asd" ]
[root@iZ28g26851kZ ~]# echo $?
1
[root@iZ28g26851kZ ~]# [ "asd" != "asdd" ]
[root@iZ28g26851kZ ~]# echo $?
0
[root@iZ28g26851kZ ~]# 

相關推薦

linux基礎shell程式設計(2)-條件判斷,算數運算,測試

bash中如果實現條件判斷? 條件測試型別 整數測試 字元測試 檔案測試 條件測試的表示式 有三種 [ expression ] --方括號與表示式之間一定要有一個空格 [[ expression ]] test exp

Linux基礎Shell程式設計

1 概述 Shell是一個命令列直譯器,它為使用者提供了一個向Linux核心傳送請求以便執行程式的介面系統級程式,使用者可以用Shell來啟動、掛起、停止甚至是編寫一些程式 Shell還是一個功能相當強大的程式語言,易編寫、易除錯、靈活性強。Shell是解釋執行的指令碼語言,在Sh

linux基礎shell程式設計(1)

shell:屬於弱型別程式語言 什麼是弱型別,什麼是強型別? 強型別:變數在使用前,必須事先宣告,甚至還需要初始化; 弱型別:變數用時宣告,甚至不區分型別; 變數賦值,引用 賦值:VAR_NAME=VALUE 引用:${VARNAM

Linux學習shell 程式設計基礎(二)

一、bash環境變數 HOME、MAIL、SHELL、PATH 等,環境變數大都用大寫字母組成 [[email protected] dalianmao]# echo $SHELL /bin/bash [[email protected] dalianmao]# echo

Linux學習shell 程式設計基礎(一)

一、linux中經常和正則表示式聯合使用的工具 grep sed awk(自己去研究吧). 二,以grep為例,有以下正則操作 特殊符號彙總 特殊符號 代表意義 [:alnum:] 代表英文

Linux學習基礎Shell程式設計——正則表示式

1、正則表示式與萬用字元 》正則表示式用來在檔案中匹配符合條件的字串,正則是包含匹配。grep、awk、sed等命令可以支援正則表示式。 》萬用字元用來匹配符合條件的檔名,萬用字元是完全匹配。ls、find、cp等這些命令不支援正則表示式,所以只能使用shell自己的萬用字元來進行匹配了

Linux shell程式設計——if條件判斷

if 語句格式if  條件then Commandelse Commandfi                              別忘了這個結尾If語句忘了結尾fitest.sh: line 14: syntax error: unexpected end of fi

Linux學習8Shell編程--條件判斷

並且 cin mil tro shell編程 spa 判斷 ont shel 一、按照文件類型進行判斷 測試選項 作 用 -b 文件 判斷該文件是否存在,並且是否為塊設備文件(是塊設備文件為真) -c 文件 判斷該文件是否

linux基礎6-shell程式設計

閱讀目錄 1、type [-ta] name 2、環境變數和自定義變數的顯示命令 2.1:env命令的顯示 2.2:set命令的顯示 2.3:export命令的顯示 2.4:PS1命令提示符 2.5:bash下變數的設定的規則 2.6:linux語系的問題 2.7:鍵盤讀取

Linux學習Shell程式設計——Bash變數——環境變數

1、環境變數,一部分是系統自定義的,還有一部分是使用者新增的,使用者可以改變其值 》環境變數是什麼? 使用者自定義變數只在當前的shell中生效,而環境變數會在當前Shell和這個Shell的所有子Shell當中生效。如果把環境變數寫入相應的配置檔案,那麼這個環境變數就會在所有的Shel

linux開發shell程式設計

1、第一個shell程式   #!/bin/bash   echo "What is your name?"   read PERSON   echo "Hello, $PERSON" 備註:(1)“#!” 是一個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種Shell。echo命令用

shell程式設計條件判斷與流程控制)學習筆記

流程控制語句 一、條件判斷式 二、單分支if語句 三、雙分支if語句 四、多分支if語句 五、case語句 六、for迴圈 七、while迴圈和until迴圈 一  條件判斷式 1 按照檔案型別進行判斷 2 按照檔案許可權進行判斷 3 兩個檔案之間進行比較

Linux作業系統Shell程式設計

Linux作業系統之Shell程式設計 Shell是種命令解釋程式,也可以看作是一種命令語言的直譯器。 使用者在與Shell互動

Linux基礎Shell與變數

一、提出問題 在平時的工作中,我們經常會碰到設定環境的問題,例如將應用的執行路徑新增到PATH中,方便程式的執行;在Linux中更多的時候是跟shell打交道,很多通過shell啟動的應用或者服務都需要設定環境變數,例如啟動es需要設定一些環境變數,那麼Shell到底是什麼?Shell又跟環境變數有什麼關係

linux學習筆記shell程式設計(二)條件判斷

條件判斷 檔案存在與否 -d 是否存在為目錄 -e 是否是檔案 -f 是否存在為檔案 [-d /root && echo "yes" || echo "no"] -檔案讀寫執行許可權#### -r 讀許可權 -w 寫

Linux基礎學習Shell程式設計——字元擷取命令相關——printf、cut、awk、sed

  一、字元擷取命令之cut命令 1、字元擷取命令有哪些? grep  cut    printf(嚴格來說不算)   awk   sed  命令 2、grep 是在檔案當中提取符合條件的行  

Linux shell程式設計中的判斷條件

-b file            若檔案存在且是一個塊特殊檔案,則為真 -c file            若檔案存在且是一個字元特殊檔案,則為真 -d file            若檔案存在且是一個目錄,則為真 -e file            若檔案存在,

嵌入式初學者學習嵌入式必看必看書籍列表,有電子檔的同學可以共享出來,謝謝 Linux基礎 1、《Linux與Unix Shell 程式設計指南》 2、《嵌入式Linux應用程式開發詳解》

嵌入式初學者參考書目 無論學習哪方面的程式設計,都需要掌握基礎知識和程式語言,其中《深入理解計算機作業系統》是比較重要的。下面是一些計算機關於嵌入式方面的推薦,有些是借鑑他人的歸納。 Linux基礎 1、《Linux與Unix Shell 程式設計指南》 2、《嵌入式Linux應用程式開發詳

linux[基礎]16-shell判斷用戶參數[01]

判斷 nbsp 可執行 center ron shel 當前 amp 系統 Shell判斷用戶參數 條件測試語句能夠測試特點的表達式是否成立   當條件成立時返回值為0   否則返回其他數值 測試語句格式:   [ 條件表達式 ] 兩側均應有一個空格   測試語

Linux學習路--http-2基礎設置及訪問限制【15】---20180108

first 配置 特定 http modules rmi 目錄訪問控制 可重復 als 一、HTTP軟件1、http服務器應用http服務器程序 httpd apache nginx lighttpd應用程序服務器 IIS .asp tomca