シェルスクリプトしたい(bash

1#! /usr/bin/env bash
2
3echo "Hello World"

bashを使ってシェルスクリプトを作成できます。

シェバング

1#! /usr/bin/env bash

シェルスクリプトの最初に、どのシェルを使うかを記述します。 #! /bin/bashと書いてもよいですが、環境によって違うかもしれないので、/usr/bin/envで返ってくるシェルを使うようにしています。

ファイルの存在を確認したい

1if ! [ -e ファイルパス ]; then
2    echo "Error: File does not exist"
3    exit 1
4fi

[ ... ]はテスト文です。 上記のスクリプトでは、[ -f ファイルパス ]を使ってファイルが存在するかを確認し、ファイルがなかった場合にエラメッセージを表示して終了させています。 -dにするとディレクトリ、-fにすると通常のファイルであるかどうかが確認できます。

コマンドの存在を確認したい(command -v

1if ! command -v コマンド名 >/dev/null 2>&1; then
2    echo "Error: コマンド名 is missing"
3    exit 1
4fi

command -v コマンド名を使ってコマンドの存在を確認できます。 上記のスクリプトは、コマンドが存在しなかった場合、エラーメッセージを表示して終了させています。

実行結果でメッセージしたい($$ / ||

1コマンドを実行 && echo "成功" || echo "失敗"

引数を確認したい($#

1if [ $# -lt 2 ]; then
2    echo "引数の数が不足しています"
3    exit 1
4fi

$#で引数の数を取得できます。 テスト文と組み合わせて、引数のバリデーションに使えます。

オプション解析したい(getopts

 1while getopts "オプション変数" opt; do
 2    case "${opt}" in
 3        変数1)
 4            arg1=${OPTARG}
 5            ;;
 6        h)
 7            ヘルプを表示する(show_help)
 8            ;;
 9        *)
10            echo "Invalid option: ${option}" >&2
11            exit 1
12            ;;
13    esac
14done

-hのように、フラグとしてのオプション変数は"h"-n 行数のように、引数が必要な場合は"n:"と書きます。

if文

1if 条件式; then
2    条件式が True の場合の処理
3fi
1if 条件式; then
2    条件式が True の場合の処理
3else
4    条件式が False の場合の処理
5fi
1if 条件式1; then
2    処理1
3elif 条件式2
4    処理2
5else
6    処理(どの条件の False の場合)
7fi

case文

 1case 変数 in
 2    パターン1)
 3        処理1
 4        ;;
 5    パターン2)
 6        処理2
 7        ;;
 8    *)
 9        処理
10        ;;
11esac

for文

1for 値のリスト in 変数; do
2    処理
3done

while/until文

1# 条件式を満たしている間
2while 条件式; do
3    処理
4done
1# 条件式を満たすまで
2until 条件式; do
3    処理
4done

select文

1select 変数 in 値のリスト
2do
3    実行内容
4done

関数を定義

1function 関数名
2{
3    実行内容
4}
1関数名()
2{
3    実行内容
4}