Skip to main content

ShellScript

作成する前に見ろ
コーディング規約

ShellScript Tips

シェルスクリプトを書く時の注意

シェルスクリプト コーディングスタイル

参考URL

ShellScript echo 色付ける

参考URL

ShellScript 変数格納一覧

【シェル芸人への道】Bashの変数展開と真摯に向き合う

ShellScript が落ちた時にスクリプトを止める

setコマンドオプション一覧
set euxについて setコマンドを先頭に記載する

#!/bin/bash -eu  # とするか
set -eu # を書いておく
set -euox pipefail

-e : エラーがあったらシェルスクリプトをそこで打ち止めにする。exit 0 以外が返ってきた場合、止まるようになる。 -u : 未定義の変数使用時、打ち止めにしてくれる。 -v : シェルの入力行を表示する -o : 設定したシェルオプションを「on」と表示する -x : トレース情報としてシェルが実行したコマンドとその引数を出力する。

Shellで毎回困る、ifの条件文一覧

参考URL

シェルスクリプト 例外処理

たいていの高級なプログラミング言語では例外処理をしなければプログラムが終了する。 しかし、シェルスクリプトではエラーが発生しても後続の処理が普通に実行される。

参考URL

コマンドのlogを表示させたくない

> /dev/null 2>&1 をつけるとログが表示されない

改行コードを反映し出力する

GNU sedでの改行変換とBSD sedでの改行出力

OSを分別する

if [ "$(uname)" == 'Darwin' ]; then
OS='Mac'
elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
OS='Linux'
elif [ "$(expr substr $(uname -s) 1 10)" == 'MINGW32_NT' ]; then
OS='Cygwin'
else
echo "Your platform ($(uname -a)) is not supported."
exit 1
fi

シェルスクリプトを作成するにあたり

まず使用するシェルを決める必要がある。

シェルスクリプト値共有(サブシェルとか考慮しなくて良いなど)

データをファイルに出力するテクニックが結構使われる。

if文 オプション

参考URL

実行場所を気にしなくてもいいシェルスクリプト

シェルスクリプトの冒頭に以下を記載すると実行場所を気にしなくてよいスクリプトになる。

cd `dirname $0`

参考URL 参考URL2

注意

ググるとよく出てくる dirname $(pwd) を使った cd $(dirname $(dirname $0)) ですが、実はスクリプトを呼び出した場所、ディレクトリ名や方法によっては正常に動作しません。 ディレクトリ名にスペースが含まれていたり、呼び出し元のディレクトリや呼び出し元が相対パスだったりする場合です。

参考URL

# 実行中のスクリプトがあるディレクトリの絶対パス (/ で始まるパス) 文字列
$(cd $(dirname $0) && pwd)
$(cd "$(dirname "$0")" && pwd)
# 実行中のスクリプトがあるディレクトリの親ディレクトリの絶対パス文字列
$(cd "$(dirname "$0")"/.. && pwd)

シェルスクリプトのパス取得のあれこれ

# dirnameコマンド
# パスのうちディレクトリ部分を取得できます。
$ dirname /home/vagrant/sample.sh
/home/vagrant
# basename コマンド
# パスのうちファイル名の部分を取得できます。

$ basename /home/vagrant/sample.sh
sample.sh

# $0
# 自分自身 (実行中のコマンドファイル) へのパスを取得できます。
$ echo $0
/bin/zsh # zshのpathが取得できる

シェルスクリプト実行後参照したい場合

参考URL 実行後も参照したい場合は、「source」コマンドを使って、シェルスクリプトを“現在動作している”bashに読み込ませる必要がある。

シェルスクリプト オプションをparse(解析)する

参考URL

2つのコマンドがある。 getopts POSIX準拠シェルの組み込みコマンド getopt 高機能だが環境依存が多くなる。

一番大事な考え方 複雑なオプション解析が必要な処理の場合は、シェルスクリプトでやるのではなく rustgo でCLI実装するのがいい選択。

シェルスクリプト errorハンドリング

参考URL

シェルスクリプト 拡張子を取得する

参考URL

親ディレクトリを不変に取得する

参考URL

ユーザー利用のシェルスクリプトを作成する

参考URL

Shell script

一般的にはシェルスクリプトは環境依存が激しいと言われている。 一方で移植性を高くするためのPOSIXという標準規格があるためそれに準拠してシェルスクリプトを書けば問題ないはずと考える人もいるが問題がある。 また、シェルスクリプトは小さいstringをコネコネといじるのに非常に不向き

シェルスクリプト御作法 shebang(シェバンについて) シェルスクリプト(コマンドライン引数) シェルスクリプト例外処理

シェルスクリプトとMakefileの使い分け

参考URL