2013-03-21 4 views
0

Я хотел бы упомянуть сейчас, что я не слишком свободно владею либо RegEx, либо BASH, поэтому объяснение in-deph было бы очень оценено, так что я могу научиться. Благодарю.BASH regex matching in if statement

Я очень сильно притупил этот файл, но в основном то, что я хочу сделать, это взять массив $sqldatabases и проверить, какие переменные содержат символ @, а затем обновить эту конкретную переменную, чтобы не включать символ @, и, наконец, запустите для этой базы данных mysqldump. В основном то, что я вижу в настоящее время с кодом в настоящее время, является отсутствие заявление фильтрации форум @.

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

ответ

1

Вы должны использовать синтаксис ${array[index]}. И вам не нужны * с, чтобы соответствовать @ (или использовать .*@.* вместо):

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

* facepalm * любительская ошибка: p Спасибо, я бы потратил часы, пытаясь понять, что один из них. – Clucky

1

На самом деле, вам не нужно никаких циклов, чтобы удалить @:

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