アーカイブから特定のファイルを取り出す

#!/bin/sh
#pickup_files.sh

. f_askstring.sh

while : ; do
    ask_string "Input archive file name(.tgz or .bz2): " 0

    if [ ! -f "$_STR" ]; then
        echo "Archive \"${_STR}\" not found."
        continue
    fi

    if [ "$_STR" != "${_STR%.tgz}" ]; then
        ARCHKIND=1
        break
    elif
        [ "$_STR" != "${_STR%.tar.bz2}" ]; then
        ARCHKIND=2
        break
    fi
done
ARCHNAME=$_STR
echo "Archive File Name is \"${ARCHNAME}\""

while : ; do
    ask_string "Input pickup file name(Blank is END): " 1
    if [ $? -eq 1 ]; then
        break
    fi
    FNAME=$_STR

    case $ARCHKIND in
        1) tar -xvkzf ${ARCHNAME} ${FNAME} ;;
        2) tar -xvkjf ${ARCHNAME} ${FNAME} ;;
    esac
done

unset ARCHNAME ARCHKIND FNAME _STR
$ ./pickup_files.sh 
Input archive file name(.tgz or .bz2): 1.tgz
Archive File Name is "1.tgz"
Input pickup file name(Blank is END): 1/a001.txt
1/a001.txt
Input pickup file name(Blank is END): 

$ ls 1
a001.txt