重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

iptablesログからSRC=10.10.10.10の通信ログを取得しようとしました。
見よう見まねで下記コマンドラインを作成しました。

【コマンドワンライナー】
for ((i=1;i<9;i++));do da="2013012"$i;logfile=iptables.log-$da.gz ; echo -n $
logfile':';zcat $logfile | grep SRC=10.10.10.10 |wc -l;done 2>/dev/null

このとき、所々に「;」を入力しました。
なぜ、;(セミコロン)をそこで入れる必要があったのかが分からないのです。

多分シェルスクリプトで記述した時の
「改行の位置?」ではないかと思っているのですが
この認識で間違っていないでしょうか?

【シェル記述 改行の位置で;(セミコロン?)】
#!/bin/sh
for ((i=1;i<9;i++))
 do da="2013012"$i
 logfile=iptables.log-$da.gz
 echo -n $logfile':';zcat $logfile | grep SRC=10.10.10.10 |wc -l
done 2>/dev/null

ご教授お願いします。

A 回答 (1件)

その通りです。

1行に複数コマンド(正確にはパイプライン)を書くときに ; で区切ります。
さらに正確には && や || もあるのですが、詳細は man bash に書いてあります。

1行1パイプラインで書くと、
#!/bin/sh
for ((i=1;i<9;i++))
 do da="2013012"$i
 logfile=iptables.log-$da.gz
 echo -n $logfile':'
 zcat $logfile | grep SRC=10.10.10.10 |wc -l
done 2>/dev/null
    • good
    • 0
この回答へのお礼

>その通りです。1行に複数コマンド(正確にはパイプライン)を書くときに ; で区切ります。

すっきりしました。
ご丁寧にありがとうございました。

お礼日時:2013/01/27 15:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!