2013-03-21 64 views
0

現在我想提一下,我不會過於流利地使用RegEx或BASH,所以我將非常感謝這樣的解釋。謝謝。BASH在if語句中匹配正則表達式

我大大拖延了這個文件,但基本上我想要做的是採取一個數組$sqldatabases並檢查哪些變量包含@符號,然後更新該特定變量不包含@符號,最後爲該數據庫運行mysqldump。基本上我所看到的代碼目前缺少if語句過濾論壇@。

source config.sh 
sqldatabases=(bans [email protected] users donators) 
for ((sqlcount = 0; sqlcount < ${#sqldatabases[@]}; sqlcount++)) 
    do 
     if [[ "$sqldatabases[sqlcount]" =~ *[@]* ]] ; then 
      sqldatabases[sqlcount]=${sqldatabases[sqlcount]//[@]/} 
      echo "$sqldatabases[sqlcount]" 
      mysqldump -u"$sqluser" -p"$sqlpass" -h"$sqlhost" ${sqldatabases[sqlcount]} > .backups/$timedate/MySQL/${sqldatabases[sqlcount]}.sql; 
     fi 
    done 

再次感謝您的幫助,並嘗試深入解釋每個修改。

+0

'* [@ *'是一個模式,而不是一個正則表達式。 – chepner 2013-03-21 12:58:49

回答

1

您需要使用${array[index]}語法。而且你不需要* s到匹配@(或使用.*@.*代替):

if [[ "${sqldatabases[sqlcount]}" =~ @ ]] ; then 
      sqldatabases[sqlcount]=${sqldatabases[sqlcount]//[@]/} 
      echo "${sqldatabases[sqlcount]}" 
      mysqldump # ... 
fi 
+0

* facepalm *業餘的錯誤:p謝謝,我會花幾個小時試圖找出一個。 – Clucky 2013-03-21 06:26:59

1

其實,你不需要任何環路刪除@:

sqldatabases=(bans [email protected] users donators) 
sqldatabases=(${sqldatabases[@]/@/}) 
echo ${sqldatabases[*]}