簡體   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