刚写的,绝对新鲜
这个作者很懒,有很多地方可以优化的,但是我懒得写了
注释已经标好了,允许二次更改分享(但希望在转载时能注明原作者 )
本人能力有限,如果有可以优化的地方欢迎反馈(我也要学习学习,没事的话也可以给我补补课)
#!/bin/bash
#set -x
#原作者: forums.debiancn.org 的 user-145580717118795 允许修改转载, 但请注明原作者
#如果没有参数,则......
if [[ ${@} == "" ]];then
echo "作者很懒, 没有设计这种操作方式呢" >&2
fi
#如果参数为 "--help" 则输出帮助
if [[ ${@} == "--help" ]];then
echo "语法: ${0} [--mode=<数字>] [<文件名0> | sha=<sha值>] [<文件名1> | sha=<sha值1>]"
exit
fi
#在所有的参数中查找
for var0 in ${@};do
#如果有以 "--mode=sha" 开头的参数
if [[ ${var0} == "--mode=sha"* ]];then
#将 sha 位数设定为 "--mode=sha" 后面的结果
mode=${var0#--mode=sha}
fi
done
#如果没有设置具体 sha 位数
if [[ "${mode}" == "" ]];then
#sha 位数默认为 512
mode="512"
fi
#列举合法的数字
aviliable_num=("1" "224" "256" "384" "512")
#验证用户输入的数字是否合法(检查是否在上面的数组中)
for var0 in ${aviliable_num[@]};do
#如果 mode变量 与 变量0 相等
if [[ "${var0}" == "${mode}" ]];then
#记录数据是合法的
aviliable="true"
break
fi
done
#如果不合法则报错并退出
if [[ ${aviliable} != "true" ]];then
echo "错误: 不支持的位数" >&2
if [[ ${mode} == *"sum" ]];then
echo "请不要在参数后加\"sum\" (绝对不是作者为了偷懒没有适配,绝对不是![傲娇.jpg])" >&2
fi
echo "mode的格式: \"--mode=sha<数字>\"" >&2
echo "所有支持的数字: \"${aviliable_num[@]}\"" >&2
exit
fi
#查找参数
for var0 in ${@};do
#忽略掉以 "--mode=sha" 开头的参数
if [[ ${var0} != "--mode=sha"* ]];then
#如果 参数0 为空
if [[ ${par0} == "" ]];then
#如果 当前参数 是以 "sha=" 开头或没有这个文件(说明这个参数表示一个 sha 值)
if [[ ${var0} == "sha="* ]] || [[ !(-f ${var0}) ]];then
#将 sha 值计入 参数0
par0=${var0#sha=}
#否则
else
#计算 sha值 并计入变量
par0=$(sha${mode}sum ${var0}|echo $(awk 'NR==1{print$1}'))
fi
#如果 参数0 有数据且 参数1 没有数据
elif [[ ${par0} != "" ]] && [[ ${par1} == "" ]];then
#如果 当前参数 是以 "sha=" 开头或没有这个文件(说明这个参数表示一个 sha 值)
if [[ ${var0} == "sha="* ]] || [[ !(-f ${var0}) ]];then
#将 sha 值计入变量
par1=${var0#sha=}
#否则
else
#计算 sha值 并计入 参数1
par1=$(sha${mode}sum ${var0}|echo $(awk 'NR==1{print$1}'))
fi
fi
fi
done
#如果 参数0 值不为空(虽然理论上不可能,但还是保险起见吧)
if [[ ${par0} != "" ]];then
#输出 参数0 的值
echo -e "sha${mode}sum0=\033[34m${par0}\033[0m"
fi
#如果 参数1 值不为空
if [[ ${par1} != "" ]];then
#输出 参数1 的值
echo -e "sha${mode}sum1=\033[34m${par1}\033[0m"
fi
#如果 参数0 与 参数1 均不为空
if [[ ${par0} != "" ]] && [[ ${par1} != "" ]];then
#比对 参数0 与 参数1 并输出结果
if [[ ${par0} == ${par1} ]];then
echo "sha${mode}比对结果: 相同"
else
echo "sha${mode}比对结果: 不同"
fi
fi