你有三個問題。
首先,你的問題不是很清楚。請更新它,清楚地說明你正在問什麼(你希望你的程序如何行爲,以及它如何不這樣做)。在這種情況下,從代碼中找出並不難,但事實並非如此。你寫
我沒有從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
命令有一個選項來抑制輸入的回顯,這是它的完美用法。以下是我可以做到這一點:(順便說一句,空字符串是一個糟糕的密碼,是什麼,其的md5sum可以用快速谷歌搜索可以找到)
#!/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
你可以使用bash模式替換,而不是''cut'中的''如果[$ {Password/- } =「d41d8cd98f00b204e9800998ecf8427e」];'' –