您有三个问题。
首先,您的问题不是很清楚。请更新问题,明确说明您想让程序如何运行以及它未能如此。在这种情况下,从您的代码中弄清楚并不太难,但并非总是如此。您写道
我无法从Linux md5sum中去掉“-”。
但实际上问题是您已经得到了“-”(可能还有更多)。
(更新:现在好多了,谢谢。)
其次,md5sum
的输出包括显示的校验和后面的一些额外信息,您需要将其删除。(如果md5sum
有一个选项可以仅打印校验和,那就太好了,但它没有。)幸运的是,很容易去除额外的信息;它只是一个空格字符和其后的所有内容。
第三,因为您使用单引号:
Password="$(echo -n '$Test' | md5sum)"
你传递给 md5sum
的字符串字面上是 '$Test'
,而不是你的变量值。
修复第二个和第三个问题:
#!/bin/bash
read Test
Password="$(echo -n "$Test" | md5sum | sed 's/ .*$//')"
echo ""
if [ "$Password" = "d41d8cd98f00b204e9800998ecf8427e" ]; then
clear
echo "WhOop WHOop"
else
echo ":("
fi
一般来说,我会批评您使用的 clear
命令,但在这种情况下,您正在擦除用户输入的密码。但是如果用户输入错误的密码,您没有清除屏幕。Bash 的 read
命令有一个选项可以抑制输入的回显,并且这是它的完美用途。以下是我可能会这样做的方式:
#!/bin/bash
read -p "Password: " -s Test
Password="$(echo -n "$Test" | md5sum | sed 's/ .*$//')"
echo ""
if [ "$Password" = "d41d8cd98f00b204e9800998ecf8427e" ]; then
echo "WhOop WHOop"
else
echo ":("
fi
(顺便提一下,空字符串是一个糟糕的密码,像 "
Test
" 这样的密码可以通过快速的谷歌搜索找到其 md5sum 值。)
cut
,例如if [ ${Password/ -} = "d41d8cd98f00b204e9800998ecf8427e" ];
。 - Dima Chubarovcut
,则也可以使用awk
:echo "$Test" | md5sum | awk '{print $1}'
。 - Benjamin Vison