シェルスクリプトしたい(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}