遍历包含值列表的 shell 参数并将这些值写入文件
Loop over an shell argument which contains a list of values and write these values to a file
我在 Linux 中有一个 shell 脚本,它需要一个参数作为输入,它可以包含一个 IP 地址列表。这些列表需要逐行写入文件。
./myTestScript.sh 192.168.100.2,192.168.100.3
在脚本中,要生成的输出是
192.168.100.2 OK
192.168.100.3 OK
并写入名为 exceptions.map 的文件。
我对单个 IP 的想法可行,但如何通过参数列表实现循环。
#!/bin/sh
IPADRESSES=
echo $IPADRESSES
sudo rm /appli/myApp/apps/mainApp/maintenance/exceptions.map
echo $IPADRESSES OK > "/appli/myApp/apps/mainApp/maintenance/exceptions.map"
#!/bin/sh
echo "" | tr , \n | sed 's/$/ OK/' > exceptions.map
或者,如果你真的想写一个循环:
IFS=,
for i in ; do
echo "$i OK"
done
请注意,此处的 </code> 必须不加引号,因为我们明确依赖 word-splitting。但通常,我会稍微更改 API 并让调用者将每个 IP 作为单独的参数传递并执行 <code>for x; do echo "$x OK"; done
。
这里有一个 pure-bash 方法:
#!/bin/bash
IFS=, read -ra addresses <<<""
for addr in "${addresses[@]}"; do
echo "$addr OK"
done > exceptions.map
IFS=...
行将第一个参数 </code> 的 comma-separated 内容读入数组 <code>addresses
。他们是 comma-separated 因为 IFS=,
。 for
循环然后依次打印每个地址,加上 OK。
一个命令,不需要循环:
$ printf '%s OK\n' ${1//,/ } > "/appli/myApp/apps/mainApp/maintenance/exceptions.map"
${1//,/ }
通过用空格替换所有逗号来拆分命令参数。 printf
根据您的格式打印每个 IP。
${1//,/ }
也可以循环使用:
for ip in ${1//,/ }; do something with "$ip"; done
我在 Linux 中有一个 shell 脚本,它需要一个参数作为输入,它可以包含一个 IP 地址列表。这些列表需要逐行写入文件。
./myTestScript.sh 192.168.100.2,192.168.100.3
在脚本中,要生成的输出是
192.168.100.2 OK
192.168.100.3 OK
并写入名为 exceptions.map 的文件。
我对单个 IP 的想法可行,但如何通过参数列表实现循环。
#!/bin/sh
IPADRESSES=
echo $IPADRESSES
sudo rm /appli/myApp/apps/mainApp/maintenance/exceptions.map
echo $IPADRESSES OK > "/appli/myApp/apps/mainApp/maintenance/exceptions.map"
#!/bin/sh
echo "" | tr , \n | sed 's/$/ OK/' > exceptions.map
或者,如果你真的想写一个循环:
IFS=,
for i in ; do
echo "$i OK"
done
请注意,此处的 </code> 必须不加引号,因为我们明确依赖 word-splitting。但通常,我会稍微更改 API 并让调用者将每个 IP 作为单独的参数传递并执行 <code>for x; do echo "$x OK"; done
。
这里有一个 pure-bash 方法:
#!/bin/bash
IFS=, read -ra addresses <<<""
for addr in "${addresses[@]}"; do
echo "$addr OK"
done > exceptions.map
IFS=...
行将第一个参数 </code> 的 comma-separated 内容读入数组 <code>addresses
。他们是 comma-separated 因为 IFS=,
。 for
循环然后依次打印每个地址,加上 OK。
一个命令,不需要循环:
$ printf '%s OK\n' ${1//,/ } > "/appli/myApp/apps/mainApp/maintenance/exceptions.map"
${1//,/ }
通过用空格替换所有逗号来拆分命令参数。 printf
根据您的格式打印每个 IP。
${1//,/ }
也可以循环使用:
for ip in ${1//,/ }; do something with "$ip"; done