bash脚本输入数组数量并填充数组数据

时间:2016-03-31 15:44:58

标签: php sql arrays linux bash

今天我想我会编写一个小的bash脚本来在SQL数据库上创建数据库表。我认为很快就会有所不同。无论如何,我处于心理障碍,需要建议。我最终想要做的是让用户在表格中输入列数,然后为他们输入的金额指定列标签和数据类型。然后我将使用数组元素来组装我的SQL服务器命令。起初对我来说似乎很明显,但不再那么重要了。任何帮助表示赞赏!

我打算做点什么......

    #!/bin/bash
    echo  "Enter database name: "
    read dbname
    echo  "Enter table name: "
    read tablename
    echo  "Enter column count: "
    read columns
    echo  "Enter database username: "
    read dbuser
    echo  "Enter database user password: "
    read dbpw

for i in ${columns[@]} do
     echo "Column "$i" Name: "
     read array_cname[$i]
     echo "Column "$i" Data Type: "
     read array_ctype[$i]
done

    table="USE $dbname CREATE TABLE $tablename(array_cname[] array_ctype[] etc etc etc)"
    mysql -u$dbuser -p$dbpw -e "$table"

以上显然是一个破碎的剧本,我只是在蚕食了我最初的目标之后鞭打它。

1 个答案:

答案 0 :(得分:1)

我只是要看看你正在努力的部分 - 循环遍历列 - 你应该能够把这些课程带回你的剧本。

这是我写的,省略了你已经完成的简单位,并将columns设置为2,以便在我测试时保存输入。

#!/bin/bash

columns=2

declare -a cols

for ((i=1; i<=$columns; i++))
do
    read -p "Column $i Name: " n
    read -p "Column $i Data Type: " t
    cols[$i]="$n $t"
done

echo "CREATE TABLE t (${cols[*]} etc etc etc)"

说明

  • 我使用declare来确保我们的数组变量的类型正确。当我们第一次分配给一个元素时,Bash会推断它是一个数组,但是我想清楚。
  • 要枚举从1$columns的整数,我使用Bash for循环。
  • 您错过了fordo之间的分号或换行符。
  • 我没有尝试直接读入数组元素,而是阅读了两个临时文件:名称为n,类型为t。我还使用-pread向我们发出提示。
  • 我没有为名称和类型使用两个单独的数组,因为Bash没有提供交错值的简单方法。相反,我将名称和类型放入单个数组元素中。如果需要,我可以使用cols+=("$n" "$t")
  • 将它们放入单独的元素中
  • 要在替换中展开数组的所有元素,我使用${cols[*]}
  • 我没有对输入进行任何验证;我假设这个脚本对你自己的使用来说很方便,而不是一个强大的工具来分享。

测试结果

$ ./36337995.sh
Column 1 Name: a
Column 1 Data Type: int
Column 2 Name: b
Column 2 Data Type: int
CREATE TABLE t (a int b int etc etc etc)