「#」でコメントアウトされた行を排除して処理するシェル
#でコメントアウトされた行を排除して処理するシェル
シェルで読み込ませるファイルには、先頭を「#」として使い方を補足で書いたりしますが、シェルの処理はそのコメント行をスキップさせる必要があります。
以下のファイルでは、補足が書かれているとともに「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 に住んでいます。 $