簡體   English   中英

獲取數組shell腳本的值並設置為變量

[英]Get values of array shell script and set to variables

如何根據搜索字符串將數組中得到的值分開? 示例:我使用此代碼:

#!/bin/bash
#Ref =  https://www.linuxquestions.org/questions/programming-9/bash-to-loop-thorouh-mysql-select-array-882907/#post5798608#
#
DBUSER="user"
DBNAME="pass"
results=($(mysql --user ${DBUSER}  ${DBNAME} -Bse "select phonenumber, userattr from usersSis WHERE sendMSG = '0';"))
cnt=${#results[@]}

for (( i=0; i<${cnt}; i++ ))
do
    echo "Total. $i: ${results[$i]} "

#    NumPhone1=${results[0]};
#    CodPhone1=${results[1]};
#    NumPhone2=${results[2]};
#    CodPhone2=${results[3]};

echo "---------------------------------------------------------------------------------------------------"
done

結果是:

Total. 0: 1223121219
---------------------------------------------------------------------------------------------------
Total. 1: 667
---------------------------------------------------------------------------------------------------
Total. 2: 3223121219
---------------------------------------------------------------------------------------------------
Total. 3: 2005
---------------------------------------------------------------------------------------------------
Total. 4: 5223121219
---------------------------------------------------------------------------------------------------
Total. 5: 545454
---------------------------------------------------------------------------------------------------

他們能像這樣嗎? REF: 在 Bash 中循環遍歷字符串數組? 創建關聯數組。 一本字典:

declare -A continent

continent[Vietnam]=Asia
continent[France]=Europe
continent[Argentina]=America

for item in "${!continent[@]}"; 
  do
    printf "$item is in ${continent[$item]} \n"
  done
Output:

 Argentina is in America
 Vietnam is in Asia
 France is in Europe

var1 = 1223121219 和 var2 = 667 var3 = ... 和 var4 = ... ... ...

如果我理解您的查詢結果格式在每一行都是"phonenum userattr" ,那么您可以創建一個以userattr鍵的關聯數組(例如result[$userattr]=phonenum )。 要將值分離到關聯數組中,您可以使用進程替換(而不是命令替換)為用於創建關聯數組的while循環提供輸入,例如

#!/bin/bash
#Ref =  https://www.linuxquestions.org/questions/programming-9/bash-to-loop-thorouh-mysql-select-array-882907/#post5798608#
#
DBUSER="user"
DBNAME="pass"

declare -A result

while read -r phone userattr; do
    result[$userattr]=$phone
done < <(mysql --user ${DBUSER}  ${DBNAME} -Bse "select phonenumber, userattr from usersSis WHERE sendMSG = '0';")

for attrib in "${!result[@]}"; do
    printf "%-8s : %s\n" "$attrib" "${result[$attrib]}"
done

注意:您的cnt=${#result[@]}也可以在上面正常工作)

我沒有要測試的數據庫,但是將上面的值作為每行輸入的"phonenum userattr" ,輸出將是:

545454   : 5223121219
2005     : 3223121219
667      : 1223121219

注意:請注意,關聯數組是否保留數據輸入的順序,它是關聯數組,元素添加的順序無關緊要)


使用的測試輸入

鑒於您遇到的困難,有必要采取一些故障排除步驟和比較。 使用您的輸出帖子,您的命令的輸出:

mysql --user ${DBUSER}  ${DBNAME} -Bse "select phonenumber, userattr from usersSis WHERE sendMSG = '0';"

應該:

1223121219 667
3223121219 2005
5223121219 545454

所以讓我們用一個簡單的輸入文件進行測試。 將以上內容保存到計算機上的文件中。 我在sqlout有它,例如

$ cat sqlout
1223121219 667
3223121219 2005
5223121219 545454

現在更改腳本以讀取文件而不是進程替換,例如

#!/bin/bash

declare -A result

while read -r phone userattr; do
    result[$userattr]=$phone
done < sqlout

echo "${#result[@]} entries"

for attrib in "${!result[@]}"; do
    printf "%-8s : %s\n" "$attrib" "${result[$attrib]}"
done

然后運行腳本並檢查您是否正在獲取所有輸出,例如

示例使用/輸出

$ bash readmysql.sh
3 entries
545454   : 5223121219
2005     : 3223121219
667      : 1223121219

如果您沒有得到相同的輸出,請告訴我,我們將從那里開始。

mysql> select * from usersSis;
+----+-------+-------------+----------+------------+---------+
| id | ipNow | phonenumber | userattr | dateExpire | sendMSG |
+----+-------+-------------+----------+------------+---------+
|  1 | NULL  | 1223121219  | 667      | NULL       | 0       |
|  2 | NULL  | 3223121219  | 2005     | NULL       | 0       |
|  3 | NULL  | 5223121219  | 545454   | NULL       | 0       |
+----+-------+-------------+----------+------------+---------+
3 rows in set (0.00 sec)

mysql>

cod 的結果: root@us:/var/www/html/arquivos# ./script.sh 545454 : 2005 : 667 :

在腳本中 > 你的腳本示例代碼 =D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM