if语句中的BASH正则表达式匹配

时间:2013-03-21 06:07:02

标签: regex arrays bash if-statement

我现在想提一下,我对RegEx或BASH都不会过于流利,所以我会非常感激in-deph解释,这样我就可以学习。感谢。

我已经大大淡化了这个文件,但基本上我想要做的是获取数组$sqldatabases并检查哪些变量包含@符号,然后更新该特定变量以不包含@符号,最后为该数据库运行mysqldump。基本上我目前看到的代码是缺少if语句过滤论坛@。

source config.sh
sqldatabases=(bans forum@ 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

再次感谢您的帮助,并尝试深入解释每项修改。

2 个答案:

答案 0 :(得分:1)

实际上,您不需要任何循环来删除@:

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

答案 1 :(得分:1)

您需要使用${array[index]}语法。并且您不需要*匹配@(或使用.*@.*代替):

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