■case文
case文は1つの文字列に対して、複数のパターンを指定し、それぞれのパターンにマッチした処理をする構文である。
▼case文の書き方
case 文字列 in
パターン1)
パターン1にマッチした時に実施する処理
;;
パターン2)
パターン2にマッチした時に実施する処理
;;
パターン3)
パターン3にマッチした時に実施する処理
;;
...
*)
どのパターンにもマッチしなかった時に実施する処理
;;
esac
・上記の「文字列」に対して、それぞれのパターンにマッチしているか、上から順に判定している。
・上から順に判定しているため、最初にマッチしたパターンの処理を実行する。
・セミコロン「;」を2つ書くことで、その処理を終了判定とする。
・パターンにワイルドカード「*)」を使用することで、どのパターンにもマッチしなかった場合の処理を行うことができる。なお、ワイルドカード「*)」を指定しないと、マッチしなかったとき、何も実行されない。
・case文の最後にはesacをつける。
■入力した数字(文字列)で判定処理
▼処理概要
シェルファイルを実行したときの第1引数を取得し、以下の判定処理を行う。
1の場合:
「1が入力されました。」と出力
2の場合:
「2が入力されました。」と出力
1、2以外の場合:
「1,2以外が入力されました:(第1引数の値)」と出力
▼サンプルコード
#!/bin/bash
# 実行時の第1引数を格納
input_num="$1"
case "$input_num" in
"1")
echo "1が入力されました。"
;;
"2")
echo "2が入力されました。"
;;
*)
echo "1,2以外が入力されました:$input_num"
;;
esac
▼実行結果
①実行コマンド:
./sample.sh 1
1が入力されました。
②実行コマンド:
./sample.sh 2
2が入力されました。
③実行コマンド:
./sample.sh 3
1,2以外が入力されました:3
■入力したファイル名で判定処理
▼処理概要
シェルファイルを実行したときの第1引数を取得し、以下の判定処理を行う。
拡張子がテキスト(*.txt)の場合:
第1引数に指定したファイル名の先頭1行を表示する。
拡張子がconfもしくはiniの場合:
第1引数に指定したファイル名の末尾1行を表示する。
上記拡張子以外:
「入力されたファイル名はサポートしていません」と出力
「ファイル名:(第1引数の名前)」と出力
▼前提(事前準備)
以下の3ファイルを予め用意。
tmp.txt
▼ファイルの中身
1行目:headコマンドが使用されました
2行目:hoge1
3行目:hoge2
4行目:hoge3
5行目:hoge4
tmp.conf
▼ファイルの中身
1行目:hoge1
2行目:hoge2
3行目:hoge3
4行目:hoge4
5行目:tailコマンドが使用されました(conf)
tmp.ini
▼ファイルの中身
1行目:hoge1
2行目:hoge2
3行目:hoge3
4行目:hoge4
5行目:tailコマンドが使用されました(ini)
▼サンプルコード
#!/bin/bash
# 実行時の第1引数を格納
file_name="$1"
case "$file_name" in
*.txt)
head -n 1 "$file_name"
;;
*.conf | *.ini)
tail -n 1 "$file_name"
;;
*)
echo "入力されたファイル名はサポートしていません"
echo "ファイル名:$file_name"
;;
esac
▼実行結果
①実行コマンド:
./sample.sh tmp.txt
1行目:headコマンドが使用されました
②実行コマンド:
./sample.sh tmp.conf
5行目:tailコマンドが使用されました(conf)
③実行コマンド:
./sample.sh tmp.ini
5行目:tailコマンドが使用されました(ini)
④実行コマンド:
./sample.sh tmp.sh
入力されたファイル名はサポートしていません
ファイル名:tmp.sh