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...