■実装するプログラムの概要
実行時に指定したファイル名を基に、tar.gz形式またはzip形式の場合は、圧縮ファイルを展開する。
■フローチャート
■プログラム仕様
インプット | 処理内容 | アウトプット |
---|---|---|
– | 実行ファイル名を変数にセットする。 | – |
【第1引数】 ファイル名を指定 | 第1引数の値を変数にセットする。 | – |
【ファイル名】 圧縮ファイル名 *.tar.gz *.zip | 【条件分岐】 第1引数について (1)*.tar.gzの場合: tarコマンドでファイルを展開する。 (2)*.zipの場合: unzipコマンドでファイルを展開する。 (3)上記以外: エラーメッセージを出力する。 | 【展開】 ファイル or ディレクトリ 【メッセージ】 エラーメッセージ |
■ディレクトリ構造
同一階層に実行モジュール「sample.sh」と圧縮ファイル「sample.tar.gz」および「sample.zip」配置する。
なお、今回使用する圧縮ファイルは、以下の処理で作成した「work」ディレクトリを圧縮したものを使用する。
■サンプルコード
#!/bin/bash
# 実行ファイル名をセット(パスは削除)
readonly MODULE_NAME=${0##*/}
# 第1引数を変数にセット(展開対象ファイル)
input_file=$1
# 展開判定処理
# 展開対象:tar.gz/zip
# 上記以外:エラーメッセージ出力
case "$input_file" in
*.tar.gz)
printf '%s\n' "${MODULE_NAME}:tar.gz形式を展開します。"
tar -xzf "$input_file"
ls ./work
;;
*.zip)
printf '%s\n' "${MODULE_NAME}:zip形式を展開します。"
unzip -q -- "$input_file"
ls ./work
;;
*)
printf '%s\n' "${MODULE_NAME}:エラーが発生しました。"
printf '%s\n' "指定した引数:${input_file}"
;;
esac
■実行結果
・tar.gzファイルを展開
$ ./sample.sh sample.tar.gz
sample.sh:tar.gz形式を展開します。
samplefile1.txt samplefile2.txt samplefile3.txt
・zip形式で圧縮
$ ./sample.sh sample.zip
sample.sh:zip形式を展開します。
samplefile1.txt samplefile2.txt samplefile3.txt
・エラーメッセージ出力(実行時の第1引数:0、1以外)
$ ./sample.sh aaa
sample.sh:エラーが発生しました。
指定した引数:aaa
コメント