我正在尝试使我的工作更轻松的东西。所以我在这里有一个脚本,它将从diff文件中收集IP。问题是awk的输出没有存储/错误的语法是错误的。我正在使用bash。
MGR${count_IP}=$(awk -F '[=;]' '{print $2}' "${MgrFile}")
echo "Test=MGR${count_IP}"
for (( count=1;count<=$Manager_Count;count++))
do
MasterFile=/etc/ansible/tmp/tmp_list
MgrFile=/etc/ansible/tmp/tmp_mgr$count
echo "$count-$MgrFile"
grep -r "Manager_$count" $MasterFile > "${MgrFile}"
echo "Copy List of IP and name Info to temp file"
echo "Get MGR$count IP"
MGR${count_IP}=$(awk -F '[=;]' '{print $2}' "${MgrFile}")
echo "MGR${count_IP}"
done
问题部分
echo "Get MGR$count IP"
MGR${count_IP}=$(awk -F '[=;]' '{print $2}' "${MgrFile}")
echo "MGR${count_IP}"
日志:
1-/etc/ansible/tmp/tmp_mgr1
Copy List Info to temp file
Get MGR1 IP
./2.sh: line 47: MGR=172.16.16.11: command not found
MGR
2-/etc/ansible/tmp/tmp_mgr2
Copy List Info to temp file
Get MGR2 IP
./2.sh: line 47: MGR=172.16.16.14: command not found
MGR
答案 0 :(得分:-1)
没有任何其他方向,shell将只评估每一行/表达式一次。但是,您正在做一些特别的事情:您要为不是常量的变量名赋值(即,其名称包含必须在赋值之前展开的变量)。这意味着你必须告诉shell两次评估表达式;一次扩展变量名,第二次为变量赋值。因此,您需要在遇到问题的行前面eval
。
eval MGR${count_IP}=$(awk -F '[=;]' '{print $2}' "${MgrFile}")
第一遍将产生例如。
MGR47=172.16.16.11
(或其他)
第二遍(eval
实际上正在做的事)将实际执行该任务。
编辑:OP可以通过其他方式编写自己的脚本,但在OP的示例中,我将答案局限于可移植,简单且无害的 这将解决他的问题。一位评论者指出,不加选择地使用eval
可能会导致意想不到的后果,例如天网的崛起,蝗虫群的出现或整个硬盘被删除。如果您想进一步了解这个问题,请阅读链接的SO问题:
Why should eval be avoided in Bash, and what should I use instead?
答案 1 :(得分:-2)
这看起来像一个简单的混淆:
$count_IP
,直到问题部分的第一行echo "Get MGR$count IP"
eval "MGR$count=\$(awk -F '[=;]' '{print \$2;}' '$MgrFile')"
echo "MGR${count}"
所以
protected String doInBackground(String... params) {
String reg_url = "http://MyIPAddress:ServerPort#/Register.php";
String name = params[1];
String user_name = params[2];
String user_pass = params[3];
try {
URL url = new URL(reg_url);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
OutputStream OS = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8"));
String data = URLEncoder.encode("user", "UTF-8") + "=" + URLEncoder.encode(name, "UTF-8") + "&" +
URLEncoder.encode("user_name", "UTF-8") + "=" + URLEncoder.encode(user_name, "UTF-8") + "&" +
URLEncoder.encode("user_pass", "UTF-8") + "=" + URLEncoder.encode(user_pass, "UTF-8");
bufferedWriter.write(data);
bufferedWriter.flush();
bufferedWriter.close();
OS.close();
return "Registration Success!";
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
应该有效