「ID: ホスト名 IP」という書式のリストが作成されると言う意図なのですが、どうしても読み込んだリストの一番最初のレコードしか記録されず悩んでいます。
どうすればよいのでしょうか、おしえてください。環境はCentOS5.3 / Bash3.2のようです。
コード
#!/bin/bash
LIST=/foo/bar/list.txt
echo -n > /foo/bar/test.dat
_CNT=0
while read line;
do
if [[ "$line" =~ "^[^#]" ]] ; then
HOSTn=`echo $line | awk '{print $1}';`
ADDR=`ssh $HOSTn ifconfig -a | awk '/(cast)/ { print $2 }' | cut -d':' -f2 | head -1`
if [ "$ADDR" != "" ] ; then
echo "$_CNT: $HOSTn $ADDR" >> /foo/bar/test.dat
fi
fi
_CNT=`expr $_CNT + 1`
done < $DBLIST
list.txtの内容(#はコメントアウトとして扱う)
host1
host2
host3
# host4
host5
host6
.
.
.
ふーむ、処理内容の細かいところは見てないけど、ざっと見はループ処理は出来てるように見えるね。
DBLIST と LIST が違ってるのは typo かな?
エラーメッセージを出すようにすればもう少し原因がつかめると思う。
#!/bin/bash DBLIST=/foo/bar/list.txt echo -n > /foo/bar/test.dat _CNT=0 while read line; do if [[ "$line" =~ "^[^#]" ]] ; then HOSTn=`echo $line | awk '{print $1}';` ADDR=`ssh $HOSTn ifconfig -a | awk '/(cast)/ { print $2 }' | cut -d':' -f2 | head -1` if [ "$ADDR" != "" ] ; then echo "$_CNT: $HOSTn $ADDR" >> /foo/bar/test.dat else echo "$_CNT: $HOSTn can't get address" 1>/dev/null 1>&2 fi fi _CNT=`expr $_CNT + 1` done < $DBLIST
無理。
[ って test コマンドのエイリアスだから。
bash は内部コマンドだけど、/bin/[ ってコマンドもあるんよ。