■今回実装するプログラムの概要
モジュールを実行するときに引数を指定する。
引数が整数の場合は加算し、整数以外はスキップする。
▼フローチャート
▼プログラム仕様
インプット | 処理内容 | アウトプット |
---|---|---|
実行ファイル名 | 実行ファイル名をセットする。 | – |
– | 実行結果の初期値(0)をセットする。 | – |
実行引数 | 【ループ処理】指定した引数分 | – |
– | 【判断】引数が整数かどうか判定する。 整数の場合: →実行結果に引数を加算する。 整数ではない場合: →整数ではないメッセージを出力する。 | メッセージ 「実行ファイル名:引数の値:”整数ではないのでスキップします”」 |
– | 【ループ処理】ここまで | – |
– | 実行結果を出力する。 | メッセージ 「”引数(整数値)の合計”:実行結果」 |
▼サンプルコード
実行ファイル名:sample.sh
#!/bin/bash
# 実行ファイル名をセット(パスは削除)
readonly MODULE_NAME=${0##*/}
# 初期値をセット
result_num=0
# 引数で指定した分ループ処理
for arg_num in "$@"
do
# 引数が整数以外の場合はスキップ
if [[ ! $arg_num =~ ^[0-9]+$ ]]; then
# エラーメッセージを出力
printf '%s\n' "${MODULE_NAME}: '$arg_num': 整数ではないのでスキップします" 1>&2
continue
fi
# 引数の値を加算していく
((result_num+=arg_num))
done
# 引数を加算した結果を出力する
printf '%s\n' "引数(整数値)の合計:$result_num"
・コードの補足
・実行ファイルの取得
実行ファイルを取得する場合、「$0」を指定するだけであると、shell実行時のパスを含む「./sample.sh」を取得するため、「${0##*/}」を指定する。
※ログ出力時、どの実行ファイルか特定するのに便利
・正規表現を判定する場合
正規表現をif文で判定する場合は「=~」と記載する(イコールとチルダ)。
・整数を判定する正規表現
整数を判定する正規表現は「^[0-9]+$」を使用する。
正規表現 | 内容 |
---|---|
^ | 先頭 |
[0-9] | 0から9 |
+$ | 前の文字(今回は0から9)を終わりまで繰り返す |
▼実行結果
実行引数に「1 a 23 bb 456 ccc」を指定する。
$ ./sample.sh 1 a 23 bb 456 ccc
sample.sh: 'a': 整数ではないのでスキップします
sample.sh: 'bb': 整数ではないのでスキップします
sample.sh: 'ccc': 整数ではないのでスキップします
引数(整数値)の合計:480
コメント