「#」でコメントアウトされた行を排除して処理するシェル

UNIX3-100

#でコメントアウトされた行を排除して処理するシェル

シェルで読み込ませるファイルには、先頭を「#」として使い方を補足で書いたりしますが、シェルの処理はそのコメント行をスキップさせる必要があります。

以下のファイルでは、補足が書かれているとともに「CCC」を「#」でコメントアウトしています。

$ cat ./files/AAA
#########################################################
# 名前、電話番号、住所をスペース区切りで書いてください。#
#########################################################
AAA 090-1111-1111 Tokyo
BBB 090-1111-2222 Osaka
# CCC 090-1111-3333 Aichi
DDD 090-1111-4444 Fukuoka
EEE 090-1111-5555 Okinawa
$

 

ファイル「AAA」を読み込んで、

 ”1項目” さんは、電話番号が ”2項目” で、”3項目” に住んでいます。

をechoしますが、先頭文字が「#」であるコメント行はスキップさせるシェルを作ります。

 

シェル内容はこのようになります。

while read NAME TEL ADDRESS ;do
  # コメント行除外
  echo $NAME | grep -v '^#.*' > /dev/null
  if [ $? -eq 0 ];then
    echo "$NAME さんは、電話番号が $TEL で、$ADDRESS に住んでいます。"
  fi
done < ./files/AAA

 

done の後に、ファイル「./files/AAA」 を 「 < 」で 読み込ませています。
そして各レコードの、1項目を変数「NAME」、2項目を変数「NAME」、3項目を変数「ADDRESS」に代入し、echoする仕様です。

先頭文字が「#」である行を排除するロジックは、以下の部分になります。

echo $NAME | grep -v '^#.*' > /dev/null
if [ $? -eq 0 ];then
  ~
fi

 

1項目である変数「$NAME」の先頭文字が「#」である場合は、/dev/null で排除しています。
排除された結果、echo コマンドが実行できないので返り値は「0」以外となり、if で返り値が「0」以外は処理しないようにすることで、コメント行を排除しています。

先頭文字が「#」であるかは、「’^#.*’」 で判断しています。「^」が先頭から始まることを意味しています。

実行すると以下の結果になります。

$ while_echo.sh
AAA さんは、電話番号が 090-1111-1111 で、Tokyo に住んでいます。
BBB さんは、電話番号が 090-1111-2222 で、Osaka に住んでいます。
DDD さんは、電話番号が 090-1111-4444 で、Fukuoka に住んでいます。
EEE さんは、電話番号が 090-1111-5555 で、Okinawa に住んでいます。
$

 

 

 

 


サブコンテンツ

このページの先頭へ