Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【シェルスクリプト】自作関数を定義して使ってみる

そういえば・・・と思い立って調べてみた
シェルスクリプトで自作関数を定義して、それを何度も呼び出すことでコードの省略化が計れる


実際に書き方を調べてみたら、本当に簡単で、なおかつその効果は絶大・・・
もっと早くに出逢っていれば・・・・



関数定義の仕方

#!/bin/sh
function hoge() {

# something

}

hogeは関数名なので、何か適当に置き換える
C言語の型変数みたいにfunctionと付いているのは関数定義のルールらしい
が、別に省略してもいいらしい

あと関数名の後の()は忘れがちなので注意

どういう引数が必要かは特に書く必要はない
引数の引用時には関数の中で

#!/bin/sh
function hoge() {

argv1=$1
argv2=$2

# something

}

# これは関数を呼び出しているところ
hoge rapu kabi

みたいにして、$1, $2と関数の引数を使用する
(シェルスクリプトの引数と同様、ということは$#や$@、$*などの変数もあるのか? いや、別に使わんからいいけど・・・)
(調べてみたらあるらしい)
関数を呼び出すときは()は不要

返り値も使用できるらしいけど、基本的にそういう凝った使い方をシェルスクリプトではしないので省略
基本的にプロットをfor i in `ls *.txt`とかで回したりするくらいなので・・・


あと実際に関数を書いてみて気づいたけど、
たぶん関数宣言と関数呼び出しの順番は、先に関数宣言をされていないとダメっぽい
(シェルスクリプトって上から順番に実行していくだけなのでそりゃあそうだと思うけど、そのことについて書かれてなかったのでちょっとハマった)