我有一個變數
BACKUP_STATUS,它由許多SUCCESS詞組成
[ryt: i9]: echo$BACKUP_STATUS
成功 成功 成功 成功
問題。 我想做一個檢查,如果一個變數中的一個字變成了其他的字,那么它就會給出一個錯誤。 我這樣嘗試
[[$BACKUP_STATUS = "SUCCESS"/span>]] & & echo true || echo false
但拋出假的
uj5u.com熱心網友回復:
你可以使用regex與test命令來搜索是否發現 "NO_SUCCESS "字串
$ SUC="SUCCESS SUCCESS SUCCESS SUCCESS"/span>
$ NSUC="SUCCESS SUCCESS SUCCESS NO_SUCCESS"/span>
$ [[ $SUC =~ .*NO_SUCCESS. * ]] && echo "出事了" || echo "一切正常"
一切正常
$ [[ $NSUC =~ .*NO_SUCCESS. *]] && echo "something wrong" || echo "everything is ok"
有問題
uj5u.com熱心網友回復:
試試這個:
[[ $(tr ' '/span> '
' <<<"$BACKUP_STATUS" | sort -u) == SUCCESS ]] & & echo true || echo false
uj5u.com熱心網友回復:
怎么樣
if [[ " $BACKUP_STATUS"/span> == *[^ ]SUCCESS* || "$BACKUP_STATUS"/span> == *SUCCESS[^ ]* ]]
然后
echo 發現意外狀態
else
echo只有成功。
fi
這個想法是為了搜索一個在SUCCESS前面或后面有東西的詞。這有點笨拙,但我找不到將這兩個條件合二為一的方法。
另一種可能性是使用一個回圈:
error=0
for statusword in$BACKUP_STATUS
do
if [[ $statusword != SUCCESS ]]
then
echo Unexpected status: $statusword[/span]。
error=1
break
fi
done done
if ( ( error == 0 ))
然后
# all SUCCESS[/span]。
...
fi 全部成功 ...
這兩種解決方案都可以在不創建一個子行程的情況下作業。
uj5u.com熱心網友回復:
我喜歡為此擴展球化和引數決議。
$: echo "[$BACKUP_STATUS]" # value with a fail。
[ 成功 成功 成功 成功 no_success ]
$: shopt -s extglob # set extended globbing。
$: echo "[${BACKUP_STATUS//*( ) SUCCESS*( )/}]"
[NO_]
$: [[ -z "${BACKUP_STATUS//*( )SUCCESS*( )/} ]] && echo ok || echo no
不
$: BACKUP_STATUS=" SUCCESS SUCCESS SUCCESS SUCCESS " # no fails。
$: echo "[${BACKUP_STATUS//*( )SUCCESS*( )/}] "
[]
$: [[ -z "${BACKUP_STATUS//*( )SUCCESS*( )/} ]] && echo ok || echo no
???
Extended globbing可以讓你擁有零或更多的空格。
${BACKUP_STATUS//*( )SUCCESS*( )/}表示回傳$BACKUP_STATUS的值,并洗掉SUCCESS的每一次出現,無論前后是否有空格。
如果留下任何東西,它就不是一個SUCCESS的回傳,所以[[ -z ...]]檢查一個零長度的回傳作為所有的成功。
這不需要催生任何外部程式。它只是Bash。
這不需要產生任何外部程式,它只是Bash。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/332515.html
標籤:
上一篇:包括一個檔案的內容的路徑
