■実装するプログラムの概要
任意のテキストファイルに対して「cat」コマンドを実行する。
その「cat」コマンドの実行結果をshell内で読み込み、1行ずつ処理する。
■フローチャート
■プログラム仕様
インプット | 処理内容 | アウトプット |
---|---|---|
– | 実行ファイル名をセットする。 | – |
– | カウンタの初期値(1)をセットする。 | – |
– | 実行ファイル名を出力する。 | 【メッセージ】 実行ファイル名 |
テキストファイル | 【ループ開始】テキストファイルに対して「cat」コマンドを実行し、その結果について、1行ずつループ処理を行う。 | – |
– | 行数と「cat」コマンドで取得した情報(1行ずつ)を出力する。 | 【メッセージ】 n行目:n行目の出力内容 ※nは任意の行数を示す。 |
– | カウンタをインクリメントする。 | – |
■入力ファイルの仕様
▼sample.txt
a
b b
c c c
dd dd
ee ee e
ff ff ff
■サンプルコード
▼sample.sh
#!/bin/bash
# 実行ファイル名をセット(パスは削除)
readonly MODULE_NAME=${0##*/}
# 初期値をセット
count=1
# 実行モジュール名を出力
printf '%s\n' "実行モジュール名:${MODULE_NAME}"
# 1行ずつ読み込み、出力する。
while read -r input_data
do
printf '%s\n' "${count}行目:${input_data}"
((count+=1))
done
■実行結果
$ cat sample.txt | ./sample.sh
実行モジュール名:sample.sh
1行目:a
2行目:b b
3行目:c c c
4行目:dd dd
5行目:ee ee e
6行目:ff ff ff
■補足説明
今回の実装仕様は、「cat sample.txt」を実行したのちに、パイプ(|)を使用して、「cat」コマンドの実行結果をshell(sample.sh)に渡している。
「sample.sh」の処理の中で、「read 」の標準入力にセットしている。
なお、以下に参考として、パイプ(|)の使い方と、標準入出力について示す。
▼パイプの使い方
▼標準入出力の使い方
■別解:catコマンドを使用しない方法
「cat」コマンドを使用せず、shellファイル内で完結させる場合は、while文(done)の最後に「sample.txt」を読み込ませる(以下コードの赤字部分)。
▼サンプルコード
#!/bin/bash
# 実行ファイル名をセット(パスは削除)
readonly MODULE_NAME=${0##*/}
# 初期値をセット
count=1
# 実行モジュール名を出力
printf '%s\n' "実行モジュール名:${MODULE_NAME}"
# 1行ずつ読み込み、出力する。
while read -r input_data
do
printf '%s\n' "${count}行目:${input_data}"
((count+=1))
done < sample.txt
▼実行結果
$ ./sample.sh
実行モジュール名:sample.sh
1行目:a
2行目:b b
3行目:c c c
4行目:dd dd
5行目:ee ee e
6行目:ff ff ff
コメント