清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#!/bin/bash
input_name()
{
if [ "$#" = "1" ]; then
name="$1"
return 0
fi
printf "请输入名称:"
read -r name
if [ -z "$name" ]; then
echo "名称不能为空!"
return 1
fi
printf "%s" "$name" | grep '[[:punct:]]' >/dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "名称不能包含标点符号!"
return 1
fi
return 0
}
get_name()
{
if [ "$#" = "0" ]; then
OLD_IFS="$IFS"
IFS='
'
select opt in `list`
do
if [ -n "$opt" ]; then
name="$opt"
IFS="$OLD_IFS"
return 0
else
echo "操作取消"
IFS="$OLD_IFS"
return 1
fi
done
IFS="$OLD_IFS"
else
name="$1"
return 0
fi
return 1
}
create()
{
input_name "$@" || return 1
show "$name" > /dev/null
if [ "$?" = "0" ]; then
echo "密码项 $name 已经存在!"
return 1
fi
printf "%s 的值:" "$name"
read -r -s value
content=`printf "%s\n%s" "$name: $value" "$content"`
echo
}
delete()
{
get_name "$@" || return 1
# 删除空行
name=`printf "%s" "$name" | sed '/^$/d'`
content=`printf "%s" "$content" | sed -e "/^$name:/d"`
}
update()
{
get_name "$@" || return 1
delete "$name"
create "$name"
}
show()
{
get_name "$@" || return 1
printf "%s" "$content" | grep "^$name:"
}
list()
{
printf "%s" "$content" | sed -e "s/:.*$//g"
}
save()
{
printf "%s" "$content" | openssl aes-256-cbc -salt -pass env:wallet_token -out "$wallet_file"
}
change_password()
{
printf "请输入当前的密码:"
read -r -s token
if [ "$token" != "$wallet_token" ]; then
printf "\n密码错误!\n"
return 1
fi
printf "\n请输入新密码:"
read -r -s new_token
printf "\n请确认新密码:"
read -r -s token
if [ "$token" != "$new_token" ]; then
printf "\n两次输入的密码不一致!\n"
return 1
fi
wallet_token="$new_token"
printf "\n修改密码成功!\n"
return 0
}
usage()
{
echo '基于 openssl 的密码管理脚本(bash)'
echo '命令: new, rm, update, show, passwd, quit'
}
if [ "$#" -gt "1" ]; then
echo "格式:$0 [<钱包文件路径>]"
echo
exit 1
elif [ "$#" -eq "1" ]; then
wallet_file="$1"
else
wallet_file="$HOME/.wallet-default"
fi
if [ -f "$wallet_file" ]; then
printf "请输入钱包密码:"
read -r -s wallet_token
export wallet_token
content=`openssl aes-256-cbc -d -salt -pass \
env:wallet_token -in "$wallet_file"`
if [ "$?" != "0" ]; then
echo '解密失败!'
exit 1
fi
else
printf "钱包不存在,需要创建一个钱包\n"
printf "请输入钱包的密码:"
read -r -s wallet_token
echo
export wallet_token
if [ -z "$wallet_token" ]; then
echo "密码不能为空"
exit 1
fi
printf "再次输入以确认密码:"
read -r -s token
echo
if [ "$wallet_token" != "$token" ]; then
echo "两次输入的密码不一致!"
exit 1
fi
content=""
unset token
fi
trap "" INT
echo
usage
while true
do
printf "\nwallet> "
read cmd
case "$cmd" in
"new" ) create ;;
"rm" ) delete ;;
"update" ) update ;;
"show" ) show ;;
"passwd" ) change_password ;;
"" ) clear; usage ;;
"quit" )
echo; save
content=""; export wallet_token=""; exit 0
;;
* ) printf "无效命令:%s\n" "$cmd"; usage ;;
esac
done