bash的算術運算
+, -, *, /, %取模(取余), **(乘方)
實現算術運算:
- (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之間隨機數
[989][root@centos6: /root]# num1=10
[990][root@centos6: /root]# num2=20
[993][root@centos6: /root]# let sum=${num1}+${num2}
[993][root@centos6: /root]# echo ${sum}
30
[994][root@centos6: /root]# echo $[${num1}+${num2}]
30
[995][root@centos6: /root]# echo $((${num1}+${num2}))
30
[996][root@centos6: /root]# nu12=$(expr ${num1} \* ${num2})
[998][root@centos6: /root]# echo ${nu12}
200
增強型賦值:
+=, -=, *=, /=, %=
let varOPERvalue
例如:let count+=3 自加3后自賦值
自增,自減:
let var+=1 或 let var++
let var-=1 或 let var–
bash條件測試
判斷某需求是否滿足,需要由測試機制來實現
專用的測試表達式需要由測試命令輔助完成
測試命令
- test EXPRESSION
- [ EXPRESSION ]
- [[ EXPRESSION ]]
注意:EXPRESSION前后必須有空白字符
測試表達式的類別
- 數值比較
- 字符串測試
- 文件測試
數值比較測試
- -gt: 是否大于
- -ge: 是否大于等于
- -eq: 是否等于
- -ne: 是否不等于
- -lt: 是否小于
- -le: 是否小于等于
[999][root@centos6: /root]# test 1 -gt 3
[1000][root@centos6: /root]# echo $?
1
[1001][root@centos6: /root]# test 1 -lt 3
[1002][root@centos6: /root]# echo $?
0
[1003][root@centos6: /root]# [ 1 -gt 3 ]
[1004][root@centos6: /root]# echo $?
1
[1005][root@centos6: /root]# [ 1 -lt 3 ]
[1006][root@centos6: /root]# echo $?
0
字符串測試:
- ==:是否等于;
- >: ascii碼是否大于ascii碼
- <: 是否小于
- !=: 是否不等于
- =~: 左側字符串是否能夠被右側的PATTERN所匹配
注意: 此表達式一般用于[[ ]]中;擴展的正則表達式
- -z “STRING”:字符串是否為空,空為真,不空為假
- -n “STRING”:字符串是否不空,不空為真,空為假
注意:用于字符串比較時的用到的操作數都應該使用引號
[1007][root@centos6: /root]# name=xiangge
[1009][root@centos6: /root]# [ -z "${name}" ]
[1010][root@centos6: /root]# echo $?
1
[1011][root@centos6: /root]# [ -z "${myname}" ]
[1012][root@centos6: /root]# echo $?
0
[root@centos6: /root]# [ "${myname}" == "${name}" ]
[1019][root@centos6: /root]# echo $?
注意以下例子:左則字串要能包含下右側字符串,反之就不行。
[1007][root@centos6: /root]# name=xiangge
[1022][root@centos6: /root]# [[ ${name} =~ "xiang" ]]
[1023][root@centos6: /root]# echo $?
[1026][root@centos6: /root]# [[ "xiang" =~ "${name}" ]]
[1026][root@centos6: /root]# echo $?
1
文件測試
存在性測試
- -a FILE:同-e
- -e FILE: 文件存在性測試,存在為真,否則為假
存在性及類別測試
- -b FILE:是否存在且為塊設備文件
- -c FILE:是否存在且為字符設備文件
- -d FILE:是否存在且為目錄文件
- -f FILE:是否存在且為普通文件
- -h FILE 或 -L FILE:存在且為符號鏈接文件
- -p FILE:是否存在且為命名管道文件
- -S FILE:是否存在且為套接字文件
寫一個判斷文件類型的腳本
1 #!/bin/bash 2 # 3 # 用戶鍵入路徑,用腳本來判斷文件類型 4 read -p "Enter a file path: " filename 5 if [ -z "$filename" ];then 6 echo "usage: Enter a file path." 7 exit 1 8 fi 9 if [ ! -e $filename ];then 10 echo "NO such file." 11 exit 2 12 fi 13 if [ -f $filename ];then 14 echo "A common file." 15 elif [ -d $filename ];then 16 echo "A common directory." 17 elif [ -L $filename ];then 18 echo "A symbolic file." 19 else 20 echo "other type." 21 fi
文件權限測試:(當前用戶)
- -r FILE:是否存在且可讀
- -w FILE: 是否存在且可寫
- -x FILE: 是否存在且可執行
文件特殊權限測試:
- -u FILE:是否存在且擁有suid權限
- -g FILE:是否存在且擁有sgid權限
- -k FILE:是否存在且擁有sticky權限
文件大小測試:
- -s FILE: 是否存在且非空
文件是否打開:
- -t fd: fd表示文件描述符是否已經打開且與某終端相關
- -N FILE:文件自動上一次被讀取之后是否被修改過
- -O FILE:當前有效用戶是否為文件屬主
- -G FILE:當前有效用戶是否為文件屬組
組合測試條件
第一種方式:
COMMAND1 && COMMAND2 并且 COMMAND1 || COMMAND2 或者 ! COMMAND 非
如:[[ -r FILE ]] && [[ -w FILE ]]
第二種方式: EXPRESSION1 -a EXPRESSION2 并且 EXPRESSION1 -o EXPRESSION2 或者 ! EXPRESSION 必須使用測試命令進行;
[990][root@centos6: /root]# [ -z "$hostName" ] || [ "$hostName" == "centos6.8E" ]
[991][root@centos6: /root]# echo $?
0
原創文章,作者:祥健,如若轉載,請注明出處:http://www.www58058.com/73626
主要介紹了bash編程的測試及算術運算,內容總結的很詳細,排版也很不錯,繼續努力!