Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 获取数组外壳脚本的值并设置为变量_Arrays_Bash_Shell - Fatal编程技术网

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