【Shell】シェル ~ 基本編・関数 ~

Hello World

 * まず、以下に「Hello World」的なサンプルを記す

 サンプル

#!/bin/bash

sample_function () {
  echo "Hello World!"
}

sample_function

 ■ 構文

 関数本体

【関数名】() {
  # 処理
}

 関数呼び出し

() はいらない

【関数名】

 ■ 関数の引数

 * 関数内では、シェルスクリプトと同様に
    変数「$1 ~ $n」で各引数を参照することが可能

 サンプル

* まず、「Hello World」的なものを提示する(「SayHello.sh」で保存) 

SayHello.sh

#!/bin/bash

sample_function2 () {
  echo "Hello World, $1!"
}

echo How are you? $1!
sample_function2 $2

出力例

> SayHello.sh Mike Tom
How are you? Mike!
Hello World, Tom!

 ■ 関数の戻り値

 * 関数の戻り値は存在しない(※以下の「注意」を参照)
 * 一般的に、以下の参考文献に
   書かれている「関数内で echo する」方法がとられる

http://www.d-wood.com/blog/2014/09/24_6873.html

 サンプル

例1

#!/bin/bash

sample_function3 () {
  echo "Hello World!"
}

result=`sample_function3`
echo $result

例2
https://dk521123.hatenablog.com/entry/2020/09/01/000000

# より抜粋

prod=`is_prod ${env}`
echo "Prod = ${prod}"

 注意

 * return コマンドは、存在するが、
    関数の終了ステータスとなるので、
    関数の戻り値としては使用できない

■ 別シェルの関数を呼ぶ

https://www.searchman.info/tips/3180.html

を参考に実装。

サンプル

main.sh

#!/bin/bash

. ./sub.sh

result=$(sub 'Mike')
echo "return code : ${?}"

echo "result : ${result}"

sub.sh

#!/bin/bash

sub(){
  name=${1}
  
  echo "Hello World, ${name}!"
  exit 0
}

出力結果

$ ./main.sh
return code : 0
result : Hello World, Mike!

 参考文献

http://capm-network.com/?tag=%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E9%96%A2%E6%95%B0
http://shellscript.sunone.me/function.html

関連記事

シェル ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/10/23/005406
シェル ~ 基本編・構文全般 ~
https://dk521123.hatenablog.com/entry/2015/02/20/001600
シェル ~ 基本編・条件分岐 if / case ~
https://dk521123.hatenablog.com/entry/2015/05/01/000043
シェル ~ 基本編・引数あれこれ ~
https://dk521123.hatenablog.com/entry/2021/07/11/000421
シェルで部分一致(前方一致・後方一致)
https://dk521123.hatenablog.com/entry/2020/09/01/000000