LoginSignup
72

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-03

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

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72