使用shc简单加密后的脚本文件恢复🌱

#!/bin/sh
##############################################################
# Used to unzip script files generated by shc                #
##############################################################
 
shcd_help()
{
    echo "  Used to unzip script file generated by shc."
    echo "  Usage:"
    echo "    0. shcd -h|?|-help       ---- Current you see"
    echo "    1. shcd inputfile        ---- 解压单个文件(输出文件inpfile.bat)"
    echo "    2. shcd inpfile outpfile ---- 解压单个文件(输出文件outpfile)"
    echo "    3. shcd -d               ---- 深层目录遍历解压(输出文件*.bat)"
    echo "    4. shcd -a               ---- 当前目录遍历解压(输出文件*.bat)"
    exit 0
}
 
get_skip()
{
    skip=0
    while read skip_line
    do
        let "skip -= 1"
        skl_f="none"
        skipstrlist=$(echo $skip_line|tr "=" "\n")
        for xs in $skipstrlist; do
            if [ "$skl_f" = "none" ]; then
                if [ "$xs" = "skip" ]; then
                    skl_f="found"
                else
                    break;
                fi
            elif [ "$skl_f" = "found" ]; then
               skip=$xs;
               break
            else
               break
            fi
        done
        if [ "$skl_f" = "found" ] || [ $skip -le -2 ]; then
            break
        fi
    done < "$1"
    echo $skip
}
 
ucount=0
 
uncomp_shc()
{
    skipline=$(get_skip $1)
    if [ "$skipline" = "" ] || [ $skipline -le 1 ]; then
        echo "%>_<% Skip flag not found: $1"
    else
        if tail -n +"$skipline" "$1" | gzip -cd > "$2"; then
            let "ucount += 1"
            echo "^_^ $ucount. Unzip $1<skip=$skipline> to $2"
        else
            echo "%>_<% Unzip $1<skip=$skipline> failed"
        fi
    fi
}
 
uncshc_dir()
{
    echo "......Enter dir '$1' ......"
    for file in $1/*
    do
        if [ -f $file ]; then
            uncomp_shc "$file" "$file.bat"
        elif [ -d $file ] && [ "$2" = "-d" ]; then
            uncshc_dir "$file" "$2"
        fi
    done
    echo "......Leave dir '$1' ......"
}
# now start to work
if [ "$#" = "0" ] || [ "$1" = "-?" ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
    shcd_help
elif [ -f $1 ]; then
    if [ "$#" = "2" ]; then
        uncomp_shc "$1" "$2"
    else
        uncomp_shc "$1" "$1.bat"
    fi
elif [ "$1" = "-d" ] || [ "$1" = "-a" ]; then
    uncshc_dir . $1
else
    echo "File $1 is not exist."
fi
echo "$ucount files are unzipped."
exit
# end of job