Bash脚本接受参数或呈现选择

时间:2014-06-18 19:54:43

标签: bash

我们有一个脚本用于将数据库从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语句中包含这些内容?

1 个答案:

答案 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
)