Arrays 获取数组外壳脚本的值并设置为变量
我如何区分这些值根据搜索字符串在数组中获取? 例子: 我使用以下代码:Arrays 获取数组外壳脚本的值并设置为变量,arrays,bash,shell,Arrays,Bash,Shell,我如何区分这些值根据搜索字符串在数组中获取? 例子: 我使用以下代码: #!/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} -
#!/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
他们会像这样吗?
裁判:
创建关联数组。字典:
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=122312119和var2=667
var3=。。。和var4=。。。
... ... 如果我理解您的查询结果格式是每行的
“phonenum userattr”
,那么您可以创建一个由userattr
键入的关联数组(例如结果[$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
(注意:请注意关联数组您是否保留了数据输入的顺序,它是关联数组,元素添加的顺序与此无关)
使用测试输入 考虑到您面临的困难,有必要进行一些故障排除步骤和比较。通过输出的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
现在更改脚本以读取文件,而不是进程替换,例如
如果您没有得到相同的输出,请告诉我,我们将从那里开始。如果我了解您的查询结果格式是每行的
“phonenum userattr”
,那么您可以创建一个由userattr
键入的关联数组(例如结果[$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
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>
(注意:请注意关联数组您是否保留了数据输入的顺序,它是关联数组,元素添加的顺序与此无关)
使用测试输入 考虑到您面临的困难,有必要进行一些故障排除步骤和比较。通过输出的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
现在更改脚本以读取文件,而不是进程替换,例如
让我知道,如果你没有得到相同的输出,我们将从那里去
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>
化学需氧量结果:
root@us:/var/www/html/arquivos#/script.sh
545454 :
2005 :
667:
在脚本>中,编写示例代码=D的脚本
化学需氧量结果:
root@us:/var/www/html/arquivos#/script.sh
545454 :
2005 :
667:
在script>You script example code=D中,请务必在问题中更清楚地提到您预期的样本输出,然后让我们知道。@banana:我看不出关联数组对您有什么帮助。当然,您可以执行类似于
data[phonenumber]=${result[0]}
的操作,但您需要存储许多数据对。在更高级的编程语言中,您可以将它们存储为记录数组,每条记录都有一个电话号码和用户属性字段。在bash中没有这个;对于这类任务,它只是一个错误的工具。显示一行来自mysql-Bse“select phonenumber,userattr from usersSis,其中sendMSG='0';”
的输出。不清楚,请务必在您的问题中更清楚地提到您期望的示例输出,然后让我们知道。@banana:我看不出关联数组在这里对您有什么帮助。当然,您可以执行类似于data[phonenumber]=${result[0]}
的操作,但您需要存储许多数据对。在更高级的编程语言中,您可以将它们存储为记录数组,每条记录都有一个电话号码和用户属性字段。在bash中没有这个;对于这类任务,它只是一个错误的工具。显示一行来自mysql-Bse“select phonenumber,userattr from usersSis,其中sendMSG='0';”
Show userattr的输出,但不显示phone。你将做一些测试,并有一个职位。现在,谢谢你们,若你们能从你们的mysql
命令中发布一行输出,我会更新以确保它能正常工作。(我刚才假设每行的格式是“122312219667”
)mysql>从usersSis中选择*;+-----+------+------+------+------+------+------++-----------++-----------+|id | ipNow | phonenumber | userattr | dateExpire | sendMSG |+---------+---------+---------+---------++----1 | NULL 124312219 | 122312219 | 667 | NULL | 0 | NULL 124212192005 | NULL | NULL | 0よNULL 124212193 | NULLウ+----+-------+-------------+----------+------------+---------+设置3行(0.00秒)mysql>在该帖子中,您在问题中的查询结果应产生带有“122312219 667”
和“32231219 2005”
和“5223121219 5454”的行
这正是上面的代码在关联数组中保留的内容。那么,在您的第一条评论中,您是说您得到的唯一输出是“545454:”
,并且没有电话号码?是的,只有userattr代码输出。没有电话号码。显示userattr,但不显示phone。你将做一些测试,并有一个职位。现在,谢谢你们,若你们能从你们的mysql
命令中发布一行输出,我会更新以确保它能正常工作。(我刚才假设每行的格式是“122312219667”
)mysql>从usersSis中选择*;+-----+------+------+------+------+------+------++-----------++-----------+|id | ipNow | phonenumber | userattr | dateExpire | sendMSG |+---------+---------+---------+---------++----1 | NULL | 122312219 | 667 | NULL | 0 | NULL | 322312219 2005 | NULL |0