我们有一个脚本用于将数据库从dev升级到QA。目前,该脚本有一个select语句,我们用它来打印出所有可用的数据库,然后进行选择并执行各种操作来推广数据库。
我想添加一个参数来绕过用于编写脚本的select语句。
以下是脚本当前的工作原理:
# GET LIST OF DATABASES
DATABASES=`echo "show databases;"|/usr/bin/mysql -u root -h $DEVHOST|grep -v "information_schema"|grep -v "Database"|grep -v "performance_schema"|grep -v "mysql"`
eval set $DATABASES
select DEVDB in "$@"
do
if [[ "$DEVDB" =~ "dev1" ]]; then
QADB=`echo $DEVDB|sed -e s/_dev1_/_qa1_/`
fi
# Does various bits after this
这是我正在尝试做的事情:
arg1=$1
if [ ! -z "$arg1" ]; then
DEVDB=$arg1
else
# GET LIST OF DATABASES
DATABASES=`echo "show databases;"|/usr/bin/mysql -u root -h $DEVHOST|grep -v "information_schema"|grep -v "Database"|grep -v "performance_schema"|grep -v "mysql"`
eval set $DATABASES
select DEVDB in "$@"
do
fi
if [[ "$DEVDB" =~ "dev1" ]]; then
QADB=`echo $DEVDB|sed -e s/_dev1_/_qa1_/`
fi
我在fi
收到错误,我认为它与select... do
有关。如何在if语句中包含这些内容?
答案 0 :(得分:1)
您需要在select
的正文中执行某些操作。在这种情况下,检查变量是否有值就足够了:
PS3="Select a database: "
select DEVDB; do
[[ $DEVDB ]] && break
done
echo "you selected $DEVDB"
这里绝对不需要eval
- 它总是代码味道。
set -- $(
/usr/bin/mysql -u root -h $DEVHOST <<< "show databases;" |
grep -v -e information_schema -e Database -e performance_schema -e mysql
)