1. 程式人生 > >腳本編程之一

腳本編程之一

www 第一個 else 數值 表達 str pass etc 隨機數生成

一、算術運算
bash中的算術運算:help let
+, -, *, /, %取模(取余) , *(乘方)
實現算術運算:
(1) let var=算術表達式
(2) var=$[算術表達式]
(3) var=$((算術表達式))
(4) var=$(expr arg1 arg2 arg3 ...)
(5) declare –i var = 數值
(6) echo ‘算術表達式’ | bc
乘法符號有些場景中需要轉義, 如

bash有內建的隨機數生成器: $RANDOM(0-32767)
echo $[$RANDOM%50] : 0-49之間隨機數

二、賦值
增強型賦值:
+=, -=, *=, /=, %=
let varOPERvalue

例如:let count+=3
自加3後自賦值
自增,自減:
let var+=1
let var++
let var-=1
let var--

三、邏輯運算
true, false
1, 0
與:
1 與 1 = 1
1 與 0 = 0
0 與 1 = 0
0 與 0 = 0
或:
1 或 1 = 1
1 或 0 = 1
0 或 1 = 1
0 或 0 = 0
非:!
! 1 = 0 ! true
! 0 = 1 ! false
短路運算
短路與
第一個為0,結果必定為0
第一個為1,第二個必須要參與運算
短路或
第一個為1,結果必定為1
第一個為0,第二個必須要參與運算
異或: ^
異或的兩個值,相同為假,不同為真

四、條件測試
判斷某需求是否滿足,需要由測試機制來實現
專用的測試表達式需要由測試命令輔助完成測試過程

評估布爾聲明,以便用在條件性執行中
? 若真,則返回0
? 若假,則返回1
測試命令:
? test EXPRESSION
? [ EXPRESSION ]
? [[ EXPRESSION ]]
註意: EXPRESSION前後必須有空白字符

 條件性的執行操作符
 根據退出狀態而定,命令可以有條件地運行

? && 代表條件性的AND THEN
? || 代表條件性的OR ELSE
例如:
grep -q no_such_user /etc/passwd \
|| echo ‘No such user‘
No such user
ping -c1 -W2 station1 &> /dev/null \

&& echo "station1 is up" \
|| (echo ‘station1 is unreachable‘; exit 1)
station1 is up

五、test命令
長格式的例子:
test "$A" = "$B" && echo "Strings are equal"
test “$A” -eq “$B” && echo "Integers are equal"
簡寫格式的例子:
[ "$A" = "$B" ] && echo "Strings are equal"
[ "$A" -eq "$B" ] && echo "Integers are equal"

六、bash的數值測試
-v VAR
變量VAR是否設置
數值測試:
-gt 是否大於
-ge 是否大於等於
-eq 是否等於
-ne 是否不等於
-lt 是否小於
-le 是否小於等於

七、bash的字符串測試
字符串測試:
= 是否等於

ascii碼是否大於ascii碼
< 是否小於
!= 是否不等於
=~ 左側字符串是否能夠被右側的PATTERN所匹配
註意: 此表達式一般用於[[ ]]中;擴展的正則表達式
-z "STRING“ 字符串是否為空,空為真,不空為假
-n "STRING“ 字符串是否不空,不空為真,空為假
註意:用於字符串比較時的用到的操作數都應該使用引號

八、Bash的文件測試
存在性測試
-a FILE:同-e
-e FILE: 文件存在性測試,存在為真,否則為假
存在性及類別測試
-b FILE:是否存在且為塊設備文件
-c FILE:是否存在且為字符設備文件
-d FILE:是否存在且為目錄文件
-f FILE:是否存在且為普通文件
-h FILE 或 -L FILE:存在且為符號鏈接文件
-p FILE:是否存在且為命名管道文件
-S FILE:是否存在且為套接字文件

九、Bash的文件權限測試
文件權限測試:
-r FILE:是否存在且可讀
-w FILE: 是否存在且可寫
-x FILE: 是否存在且可執行
文件特殊權限測試:
-u FILE:是否存在且擁有suid權限
-g FILE:是否存在且擁有sgid權限
-k FILE:是否存在且擁有sticky權限

十、Bash的文件屬性測試
文件大小測試:
-s FILE: 是否存在且非空
文件是否打開:
-t fd: fd 文件描述符是否在某終端已經打開
-N FILE:文件自從上一次被讀取之後是否被修改過
-O FILE:當前有效用戶是否為文件屬主
-G FILE:當前有效用戶是否為文件屬組

十一、Bash的文件屬性測試
雙目測試:
FILE1 -ef FILE2: FILE1是否是FILE2的硬鏈接
FILE1 -nt FILE2: FILE1是否新於FILE2(mtime)
FILE1 -ot FILE2: FILE1是否舊於FILE2

十二、Bash的組合測試條件
第一種方式:
COMMAND1 && COMMAND2 並且
COMMAND1 || COMMAND2 或者
! COMMAND 非
如: [ -f “$FILE” ] && [[ “$FILE”=~ .*.sh$ ]]
第二種方式:
EXPRESSION1 -a EXPRESSION2 並且
EXPRESSION1 -o EXPRESSION2 或者
! EXPRESSION
必須使用測試命令進行, [[ ]] 不支持
示例
[ -z “$HOSTNAME” -o $HOSTNAME "=="localhost.localdomain" ] \
&& hostname www.magedu.com
[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

腳本編程之一