シェルスクリプトに関する雑多な学習メモ
一つひとつを記事にするほどでもない雑多な学習メモたち。
目次
- Shebang は
#!/bin/bash
にしよう - 命名規則
- シェルスクリプトの関数
- 関数の戻り値が欲しい時
- ローカル変数を宣言するには
local
を付与して宣言する - 関数の引数
- 他ファイルに書いた変数や関数を利用する
.bashrc
の肥大化問題- その他
Shebang は #!/bin/bash
にしよう
#!/bin/sh
だと微妙に動きが異なることがある。Bash 特有の機能を使っていることも多いので #!/bin/bash
と書く方が良い。
命名規則
- 関数、通常の変数、ファイル名はロウワー・スネークケース (
lower_snake_case
)- ローカル変数 (
local
) は先頭にアンダースコアを付けて区別する例もあった (_local_variable
)
- ローカル変数 (
- 定数 (
readonly
)、環境変数はアッパー・スネークケース (UPPER_SNAKE_CASE
)- グローバル変数は大文字始まりのスネークケースにする例もあった (
Global_variable
もしくはGlobal_Variable
)
- グローバル変数は大文字始まりのスネークケースにする例もあった (
- ディレクトリパスを書く時は末尾に
/
を付けない (cp -r
コマンドとかで結果が変わる)
あたり。
- 参考 : Googleの肩に乗ってShellコーディングしちゃおう - Qiita
- 参考 : bashコーディング規約 - Qiita
- 参考 : Googleシェルスタイルガイドを要約してみた – 0から始めるインフラ日誌 – 30代インフラエンジニアがWebインフラ中心に備忘録を書き溜めていきます
シェルスクリプトの関数
# 先頭の「function」は省略しても大丈夫
function 関数名() {
処理
return 値 (0 or 1〜255 の整数値のみ)
}
# 呼び出し時は「()」不要
関数名 引数リスト
- 参考 : 関数の使用方法 | UNIX & Linux コマンド・シェルスクリプト リファレンス
- 参考 : 【Linux】シェルスクリプトの関数の使い方!一通りまとめ
- 参考 : Shellで別ファイルの関数に引数を渡し戻り値を得る方法 - やってみる
関数の戻り値が欲しい時
終了コードでない「戻り値」が欲しい場合は、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
のように現在のシェルを利用したりしたい時は、関数として実行できるようにしておかないといけない
その他
- 参考 : bashで素晴らしく生産性を上げるための10のテクニック | Yakst … いろんな Tips。自分専用のコマンドパッケージを作るの良さそう。
- 参考 : 私が他人のシェルスクリプトから学んだこと | Yakst … これも Tips。
- 参考 : bashmarksでディレクトリをブックマークする - inkdesign … ディレクトリをブックマークできる bashmarks。
- 参考 : Use the Unofficial Bash Strict Mode (Unless You Looove Debugging) … Strict Mode。
おわり。