いろいろな形式の圧縮ファイルを解凍する

スクリプト名: unsqueeze.sh
書式: unsqueeze.sh ファイル ...
目的: さまざまな圧縮形式のファイルを解凍する
戻り値: すべて成功:0 一部失敗:1 エラー:9

#!/bin/sh
. Error_Msg.sh && . Arg_Nums.sh && . Chk_File.sh || exit 9
Arg_Nums -ge 1 "$@" || exit 9
Chk_File -dw "." || exit 9

for _COMPRESS in "$@"; do
    _FLAG=

    #圧縮ファイルの読み込みチェック
    Chk_File -r "$_COMPRESS" || \
    { Error_Msg "$0" "Could not read $_COMPRESS." _FLAG=failed; }

    #展開コマンドの確定とフラグ
    case $_COMPRESS in
        *.tar.gz | *.tgz ) _COMMAND="tar zxf" ;;
        *.tar.bz | *.tbz ) _COMMAND="tar jxf" ;;
        *.tar            ) _COMMAND="tar xf"  ;;
        *.lzh | .LZH     ) _COMMAND="lha x"   ;;
        *.gz | *.z | *.Z ) _COMMAND="gunzip"  ; _FLAG=over ;;
        *.bz2 | *.bz     ) _COMMAND="bunzip2" ; _FLAG=over ;;
        *.zip            ) _COMMAND="unzip"   ;;
        * ) Error_Msg "$0" "Unknown file extension."
            _FLAG=failed ;;
    esac

    #展開作業
    if [ "$_FLAG" = over ]; then
        _FILENAME=$(echo "$_COMPRESS" | sed 's%\.[^\.]*$%%')
        _FILENAME=$(basename "$_FILENAME")
        $_COMMAND < "$_COMPRESS" > "$_FILENAME"
    elif [ "$_FLAG" = failed ]; then
        _RETURN=1
    else
        $_COMMAND "$_COMPRESS"
    fi
done
exit $_RETURN