Corredor

ウェブ、プログラミングの勉強メモ。

シェルスクリプトに関する雑多な学習メモ

一つひとつを記事にするほどでもない雑多な学習メモたち。

Shebang は #!/bin/bash にしよう

#!/bin/sh だと微妙に動きが異なることがある。Bash 特有の機能を使っていることも多いので #!/bin/bash と書く方が良い。

命名規則

  • 関数、通常の変数、ファイル名はロウワー・スネークケース (lower_snake_case)
    • ローカル変数 (local) は先頭にアンダースコアを付けて区別する例もあった (_local_variable)
  • 定数 (readonly)、環境変数はアッパー・スネークケース (UPPER_SNAKE_CASE)
    • グローバル変数は大文字始まりのスネークケースにする例もあった (Global_variable もしくは Global_Variable)
  • ディレクトリパスを書く時は末尾に / を付けない (cp -r コマンドとかで結果が変わる)

あたり。

シェルスクリプトの関数

# 先頭の「function」は省略しても大丈夫
function 関数名() {
  処理
  return(0 or 1255 の整数値のみ)
}

# 呼び出し時は「()」不要
関数名 引数リスト

関数の戻り値が欲しい時

終了コードでない「戻り値」が欲しい場合は、echo を使い、コマンド置換で取得する。

function my_func() {
  echo "これが戻り値です。"
}

# コマンド置換で受け取る
rtn=`my_func`

echo "戻り値=${rtn}"

ローカル変数を宣言するには local を付与して宣言する

function my_func() {
  local local_var="この変数はローカル変数です !"
  local readonly LOCAL_VAR="この変数はローカル定数です !"
}

関数の引数

関数の引数は $1 以降の $n で受け取れる。$# で引数の数。$@$* で引数全てを展開。$0 はそのシェルスクリプトファイル自身が入っている。

他ファイルに書いた変数や関数を利用する

他のファイルに書いた変数や関数を利用するには、. (source) で読み込んでおく。~/.bash_profile 内で source ~/.bashrc するのと同じ。

# こんな「my_func.func」というファイルがあったとして
function my_func_return_one() {
  echo 1
}

# こうやって読み込む
. my_func.func
my_func_return_one

.bashrc の肥大化問題

読み込むものが多いと起動に時間がかかる。実行可能ファイルにしておけば実行時に読み込まれるので起動が速くなる。

ただし、現在のシェルに影響を与えたり、history のように現在のシェルを利用したりしたい時は、関数として実行できるようにしておかないといけない

その他


おわり。

UNIXシェルスクリプトコマンドブック 第3版 (コマンドブックシリーズ)

UNIXシェルスクリプトコマンドブック 第3版 (コマンドブックシリーズ)