bash 指令碼程式設計之二 條件判斷

2021-09-20 23:19:30 字數 3884 閱讀 3962

bash中如何實現條件判斷

條件判斷型別:

整數判斷(雙目判斷):

-eq:等於 、equal,測試兩個整數之間是否相等,比如$a -eq $b

-gt:大於、greater than

-lt:小於、lesser than

-ne:不等於、no  equal

這裡也可以用另外一種寫法,比如[ 2 -ne 3 ]可以寫作[ ! 2 -eq 3 ]

-le:小於或等於、lesser or equal

-ge:大於等於、greater or equal

...字元判斷:

檔案判斷:單目判斷

-e:exist判斷檔案是否存在

-d:directory判斷檔案是否為目錄

-r:read 判斷檔案是否可讀

-w:write ...........可寫

-x:executable...........可執行

...條件判斷的表示式:

[ expression ] 

注意 最左和左右需要空格,這裡linux把表示式當成命令來判斷

` expression `

同樣需要注意空格,這裡linux把表示式當成關鍵字來判斷,至於兩者區別,暫時存疑    

test  expression 

命令間的邏輯關係:

邏輯與:&&

使用邏輯與的時候,當第乙個條件判斷為假,則後面條件不再判斷

邏輯或:||

使用邏輯或的時候,當第乙個條件判斷為真,則後面條件不再判斷

邏輯非:!

對條件判斷結果進行取反

示例:如果使用者user1不存在,則新增user1

[root@logstach ~]# id user1 

id: user1: no such user

[root@logstach ~]# ! id  user1 &> /dev/null &&  useradd user1 &> /dev/null

[root@logstach ~]# id  user1

uid=3001(user1) gid=3001(user1) groups=3001(user1)

或者id  user1|| useradd user1

如果/etc/inittab檔案的行數大於100,就顯示'large file'

[ `wc -l  /etc/inittab |cut -d' ' -f1 ` -gt 100 ] && echo  "large file"

變數的命令規則:

只能用數字、字母和下劃線組成

不能用數字開頭

不應該與系統環境變數重名

最好做到見名知義

練習:如果使用者存在,就顯示已經存在,否則新增此使用者

id  user1 && echo 'user exists!' || useradd user1 

如果使用者不存在就新增,否則顯示已經存在

!id user1&&useradd user1 ||echo 'user1  already exists!' 

如果使用者不存在,新增並給其與使用者名稱同名的密碼,否則顯示其已經存在。

id  user1 && echo 'user already exists!'|| useradd user1 && echo 『user1'|passwd user1 --stdin

[root@logstach ~]# id  user1 && echo 'user ?already exists!' || useradd user1 && echo 'user1'|passwd user1 --stdin

uid=3001(user1) gid=3001(user1) groups=3001(user1)

user ?already exists!

changing password for user user1.

passwd: all authentication tokens updated successfully.

[root@logstach ~]# id  user1 && ?echo 'user ?already exists!' ||( useradd user1 && echo 'user1'|passwd user1 --stdin)

uid=3001(user1) gid=3001(user1) groups=3001(user1)

user ?already exists!

[root@logstach ~]# 

注意:這裡如果不加()的話,當shell執行到||時不執行useradd user1,但是它會繼續往下讀,到第二個&&時,把前面 id  user1 && echo 'user ?already exists!' || useradd user1當成乙個整體,發現整體結果為真,則繼續執行後面的內容passwd user1 --stdin。加()可以告訴shell,

useradd user1 && echo 'user1'|passwd user1 --stdin是乙個整體。

練習:寫乙個指令碼,完成以下要求:

新增3個使用者user1、user2、user3,但要先判斷使用者是否存在,不存在而後再新增

新增完成後,顯示最後新增了哪幾個使用者,當然,不能包含已經存在而沒有新增的

最後顯示系統上有幾個使用者。

#!/bin/bash

! id  user1 &> /dev/null &&  useradd user1 && echo 'useradd user1'

! id  user2 &> /dev/null &&  useradd user2 && echo 'useradd user2'

! id  user3 &> /dev/null &&  useradd user3 && echo 'useradd user3'

total=`cat /etc/passwd|wc -l`

echo  "$total users."

練習:寫乙個指令碼,完成以下要求:

給定乙個使用者:

如果uid為0就顯示為管理員

否則,就顯示其為普通使用者

#!/bin/bash

user=user1

userid=`grep $user /etc/passwd|cut -d: -f3`

[ $userid -eq 0 ] && echo "administrator!" || echo  "common user."

條件判斷,控制結構:

單分支if語句:

if 判斷條件;then

statement1

statement2

..fi

then如果另起一行,則;可以省略,否則不行

雙分支if語句:

if  判斷條件;then

statement1

statement2

...else

statement1

statement2    

...fi

多分支if語句:

if  判斷條件1;then

statement1

...elif 判斷條件2;then

statement2  

...elif 判斷條件3;then

statement3

....

else

statement4

...fi

if  ls /var ...和if `ls  /var` ...的區別:

if ls /var 會根據命令的執行狀態結果進行判斷,0為真,1-255為假,而if `ls  /var`則會報錯,因為 `ls  /var`返回的是命令的執行結果,if 不能對其進行判斷,但是如果新增條件使其能滿足條件判斷的條件,則可以進行判斷,例如:

if  [ `ls  /var|wc -l` -gt 20 ];then 

echo 'large directory'fi

05 03 bash指令碼程式設計之二 條件判斷

條件判斷 如果使用者不存在,新增使用者,給密碼並顯示新增成功 否則,顯示如果已經存在,不用新增。bash中如何實現條件判斷?條件測試型別 整數測試 字元測試 檔案測試 條件測試的表示式 expression expression test expression 整數比較 eq 測試兩個整數是否相等 ...

Linux環境程式設計之同步 二 條件變數

相互排斥鎖用於上鎖,條件變數則用於等待。條件變數是型別為pthread cond t的變數。一般使用例如以下函式 include int pthread cond wait pthread cond t cptr,pthread mutex t mptr int pthread cond signa...

二 條件迴圈語句

1 查詢那些既可以被7整除又可以被5整除的數字,介於1500和2700之間 1 使用列表推導式 num i for i in range 1500 2700 if i 7 0and i 5 0 print num out 1505,1540,1575,1610,1645,1680,1715,1750...