繁体   English   中英

输入数组数量和填充数组数据的bash脚本

[英]bash script to enter array quantity and fill array data

今天我想我会写一个小的 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"

上面显然是一个损坏的脚本,我只是在蚕食了我最初要做的事情后才把它搅起来。

我将只查看您正在努力解决的部分 - 遍历列 - 您应该能够将这些课程带回到您的脚本中。

这就是我写的,省略了你所做的简单部分,并将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表示类型。 我还使用-p使read为我们发出提示。
  • 我不使用两个单独的数组作为名称和类型,因为 Bash 没有提供一种简单的方法来交错这些值。 相反,我将 name 和 type 放入单个数组元素中。 如果需要,我可以将它们放入单独的元素中,使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM