シェルスクリプトでパイプで繋げられると便利なので、標準入力を受け取れるようにする方法メモ
実装例. 引数または標準入力で受け取った数値を合計するスクリプト
sum.sh
#!/bin/bash
# 標準入力を受け取る関数実装例 `cat -` を使う
_sum() {
local sum=0
for i in $(cat -)
do
sum=$((sum + i))
done
echo $sum
}
# 標準入力を受け取るスクリプト実装例
# NOTE:
# if ~ fi にパイプをつなげると有効な方の標準出力を受け取れる
if [ -p /dev/stdin ]; then
cat -
else
echo $@
fi | _sum
実行例
# 引数で受け取る
$ ./sum.sh
0
$ ./sum.sh 1 2 3
6
$ ./sum.sh {0..100}
5050
# 標準入力で受け取る
$ echo -n | ./sum.sh
0
$ echo 1 2 3 | ./sum.sh
6
$ echo {0..100} | ./sum.sh
5050
その他、read
を使う例と /dev/stdin
を使う例は以下を参照
USP友の会:シェルスクリプトでの標準入力の読み方
参考
Bash シェルスクリプトで標準入力を受け取る - アウトプットができる技術者に
USP友の会:シェルスクリプトでの標準入力の読み方