在下面,您可以找到一个必须管理csv文件的bash脚本。
#!/bin/bash
IFS=";"
while read -a line;do
printf "xxxxxxxxxxx Adresse: " >> retour.txt
printf ${line[0]} >> retour.txt
for i in ${line[@]}
do
if [ "$i" != "${line[0]}" ]
then
printf "\n port: " >> retour.txt
printf $i >> retour.txt
printf "\n" >> retour.txt
nc ${line[0]} $i >> retour.txt 2>&1
fi
done
printf "\n\n" >> retour.txt
done < Classeur.csv
csv文件的每一行包含以下内容:
当我启动脚本时,它在第一行之后停止。 如果我从代码中删除以下行,则一切都将被处理。
nc ${line[0]} $i >> retour.txt 2>&1
尽管如此,删除的行仍包含主要操作... 因此,我想这是线路中的错误,我想知道出现错误时如何继续操作。
----------- 2018年6月25日------
我遵循人们评论所提供的建议。当我在调试模式下启动代码时,得到以下结果:
IFS=';'
read -a line
printf 'xxxxxxxxxxx Adresse: '
printf xxx.xxx.xxx.238
for i in '${line[@]}'
'[' xxx.xxx.xxx.238 '!=' xx.xx.xx.238 ']'
for i in '${line[@]}'
'[' yyy1 '!=' xx.xx.xx.238 ']'
printf '\n port: '
printf yyy1
printf '\n'
nc -w 2 xxx.xxx.xxx?.238 yyyy
telnet xxx.xxx.xxx.238 yyy1
Trying xxx.xxx.xxx.238...
Connected to xxx.xxx.xxx.238.
Escape character is '^]'.
Connection closed by foreign host.
for i in '${line[@]}'
'[' yyy5 '!=' xxx.xxx.xxx.238 ']'
printf '\n port: '
printf yyy5
printf '\n'
nc -w 2 xxx.xxx.xxx.238 yyy5
telnet xxx.xxx.xxx.238 yyy5
Trying xxx.xxx.xxx.238...
telnet: connect to address xxx.xxx.xxx.238: Connection refused
for i in '${line[@]}'
'[' yyy6 '!=' xxx.xxx.xxx.238 ']'
printf '\n port: '
printf yyy6
printf '\n'
nc -w 2 xxx.xxx.xxx.238 yyy6
telnet xxx.xxx.xxx.238 yyy6
Trying xxx.xxx.xxx.238...
telnet: connect to address xxx.xxx.xxx.238: Connection refused
printf '\n\n'
read -a line
我用xxx.xxx.xxx.238替换了ip,并用yyy1这样的值替换了端口
它也停在第一行。
这是csv文件:
xxx.xxx.xxx.238;yyy1;yyy5;yyy6
xxx.xxx.xxx.82;yyy1;yyy5;yyy6
xxx.xxx.xxx.15;yyy6;yyy7;yyy0
就像您看到的那样,仅使用第一行。
如果我删除>> retour.txt
并添加,请在创建的文件中获取以下文本:
xxxxxxxxxxx Adresse: xxx.xxx.xxx.238
port: yyy1
Trying xxx.xxx.xxx...
Connected xxx.xxx.xxx.238.
Escape character is '^]'.
port: yyy5
Trying xxx.xxx.xxx.238...
port: yyy6
Trying 1xxx.xxx.xxx.238...
它与csv文件的第二行无关。
-----以下代码为解决方案-----
Finally, i arrived to solve the problem by following another way:
#!/bin/bash
IFS=";"
nbLines=$(cat classeur.csv | wc -l)
for ((j=1;j<=nbLines;j++))
do
numRow="NR=="
position=$numRow$j
row=$(awk $position classeur.csv)
IFS=" " read -ra TAB <<< $row
for cell in "${TAB[@]}"
do
ipValeur=${TAB[0]}
if [ "$cell" != "$ipValeur" ]
then
printf "\n port: " >> retour.txt
printf $cell >> retour.txt
printf "\n" >> retour.txt
nc -w 2 $ipValeur $i >> retour.txt 2>&1
else
printf "xxxxxxxxxxx Adresse: " >> retour.txt
printf $ipValeur >> retour.txt
fi
done
done