shell計算(二)let和expr命令

一   let運算命令

(1)let運算命令的'語法格式':let 賦值表達式-->let a=3+5

let'賦值表達式'的功能等同於--->'((賦值表達式))'

'let i=i+2' ==>等價 '((i=i+2))'

'關鍵':後者的效率更高

取消變量

unset  環境變量

unset JAVA_HOME

不管是臨時環境變量還是系統環境變量('只對當前終端起作用')

經典案例:監控Web服務狀態,如果訪問兩次均失敗,則報警

#!/bin/bash

# (1)寫成一個函數,方便後續調用

CheckUrl(){
    # 1)超時檢測時間-->定義wget訪問的超過時間,沒有返回數值則表示失敗,則退出
    timeout=5
    # 2)初始化訪問網站失敗所記錄次數,定義:失敗達到兩次,則發送郵件報警
    fails=0
    # 3)初始化訪問網站成功所記錄次數,定義:只要在規定的時間內,成功一次(記錄爲1)則表示成功,退出腳本
    success=0

    # 4)死循環-->持續監測-->成功,則exit退出
    while true
    do
	# (1)wget訪問自己的一個博客
        wget --timeout=${timeout} --tries=1 https://harbor.wangzj.club -q -O /dev/null
	# (2)根據命令回傳碼判斷網站的存活狀態
	if [ $? -ne 0 ];then
	    # 將訪問失敗的次數加1
	    let fails+=1
	else
	    # 返回值不爲0則不成立,即訪問成功
	    let success+=1
	fi

	# (2)如果成功的次數大於1等於1-->一般是等於1(其實可以寫到上面success+=1下面)
	if [ $success -ge 1 ];then
	    # 下面是爲了觀察方便,打印標識-->可以加上顏色
	    echo "Your Website is alive"
	    # 退出腳本
	    exit 0
        fi

	# (3)如果失敗次數大於等於2-->實際等於2,則報警
	if [ $fails -ge 2 ];then
	    # 定義描述信息
	    Critical="Your Website is dead"
	    # 輸出併發送郵件警報;需要單獨配置自己的郵箱地址
        # v的含義-->將 Mail 程序置爲詳細方式。顯示傳送到用戶終端的詳細信息。
        # s含義-->標題
	    echo $Critical|tee|mail -v -s "$Critical" [email protected]
	    # 同時退出
	    exit 2
	fi
done

}

# 調用函數

CheckUrl

發送郵件一個小腳本

[root@ecs-TmQV ~]# cat sendmail-to-qq.sh 
#!/bin/bash
# (1)獲取qq的授權碼
# (2)安裝發送郵件的軟件
yum install mailx -y
# (3)重新定義mail的配置文件
echo \
"# 對方收到郵件時顯示的發件人
set [email protected]
# 第三方發郵件的smtp服務器地址		       
set smtp=smtps://smtp.qq.com:465
# 第三方發郵件的用戶名
set [email protected]
# 授權碼
set smtp-auth-password=mspxxxxxxiogeeb 
# 認證
set ssl-verify=ignore
set nss-config-dir=/root/.certs
# 第三方發郵件的smtp服務器地址
set smtp-auth=login" >> /etc/mail.rc
echo "狀態碼是$?"
#命令生成一個整數-->防止出現報錯-->'Error in certificate: Peer’s certificate issuer is not recognized.'
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs

測試效果

參考文檔

二    expr命令

expr命令的基本用法

expr既可以用於'整數運算',也可以用於'相關字符串長度'、'匹配'等的運算處理

1)expr 用於計算

語法:expr Expression ==>'表達式中可包含變量'

expr 1 + 1

# *在shell中有特殊含義-->統配符,這裏轉移,表示運算符號

expr 2 \* 3

注意事項

運算符及用於計算的'數字左右'都'至少有一個空格',否則會'報錯'

使用乘號時,必須用'反斜線'進行'轉義'

2)expr 配合變量計算

expr 在 shell 中可'配合變量進行計算',但需要用'反引號或 $()' 將計算表達式'括起來'

 i=5
 j=$(expr $i + 5)
 echo $j

 3)判斷變量或字符串是否爲整數

'原理':利用以 expr 做計算時'變量'或'字符串必須是整數的規則',把一個變量或字符串'位置變量'和一個已知的整數(非0)相加,看命令返回的值是否爲0

'結果':如果是0,就認爲做加法的變量或字符串爲整數,否則就不是整數

報錯:非整數參數

#!/bin/bash
# 功能通過傳參判斷輸出的內容是否爲整數
# cat expr.sh
expr $1 + 1 > /dev/null
[ $? -eq 0 ] && echo int || echo chars

4)expr特殊用法

(1)判斷文件擴展名是否複合要求

# 是否是以sh結尾的

expr "text.sh" : ".*\.sh" &>/dev/null && echo "yes" ||echo  "no"

".*\.文件後綴"---> ':' 號的作用

(2)計算字符串的長度

小需求:統計語句中字符數不大於6的單詞,並輸出

#!/bin/bash
for i in I am wzj java welcome everyone to our training
do
	if [ `expr length $i` -le 6 ];then
		echo $i
        fi
done

鏈接1

鏈接2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章