如何根据搜索字符串分隔数组中获取的值?示例:我使用以下代码:
#!/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:Loop through an array of strings in 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 Europevar1 = 1223121219和var2 = 667 var3 = ...和var4 = ... ...
发布于 2020-01-21 16:11:35
如果我理解您的查询结果格式在每一行都是"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(注意:注意:关联数组是否保持数据输入的顺序,它是一个关联数组,元素的添加顺序是无关紧要的)
使用的测试输入
考虑到您遇到的困难,有必要执行几个故障排除步骤并进行比较。使用输出的post,命令的输出:
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如果您没有得到相同的输出,请让我知道,我们将从那里开始。
发布于 2020-01-22 09:39:54
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:
在script >中,您可以编写示例代码=D
https://stackoverflow.com/questions/59835791
复制相似问题