69
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

標準入力を受け取れるシェルスクリプト、関数の作成(パイプで繋げられるようにする)

シェルスクリプトでパイプで繋げられると便利なので、標準入力を受け取れるようにする方法メモ

実装例. 引数または標準入力で受け取った数値を合計するスクリプト

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友の会:シェルスクリプトでの標準入力の読み方

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
69
Help us understand the problem. What are the problem?