即使if语句也没有意义,循环也会启动,但是我对bash很新,所以对我来说很多事情都没有意义
first=0
echo enter your username
read user
log1=$(grep -q $user username_pass.txt)
echo enter your password
read pass
log2=$(grep -q $pass username_pass.txt )
if [ $log1=0 ] && [ $log2=0 ];
then
echo Welcome
first=1
fi
while [ $log1=1 ] || [ $log2=1 ];
do
echo wrong user name or password
echo enter your username
read user
echo enter your password
read pass
done
if [ $log1=0 ] && [ $log2=0 ] && [ first=0 ];
then
echo Welcome
fi
答案 0 :(得分:0)
]
在shell中不是特别特殊的语法。您正在将参数[
和]
传递给名为test
的命令,该命令会从其参数中删除$log1
并将其余部分传递给test 'username=0'
。假设test
包含“username”,结果为:
$log1=0
当if [ "$log1" = 0 ] && [ "$log2" = 0 ]; then
获得一个参数时,它会检查该参数是否为非空字符串。 $log1
永远不会是空字符串。
你真正想要的是将操作符和操作数作为单独的参数传递,如下所示:
grep
请注意引号,以防止$?
扩展为多个参数。
如果你将它与一个数字进行比较,你可能也想从grep -q "$user" username_pass.txt
log1=$?
获得一个退出代码而不是输出代码,这个数字在运行命令后会是test_credentials() {
grep -q "$1" username_pass.txt || return 1
grep -q "$2" username_pass.txt || return 1
}
if test_credentials "$user" "$pass"; then
…
:
stack build
您也可以将其拆分为易于使用的功能。
Main
您可能还想重新考虑如何检查凭据。两次使用同一个文件可能会遇到很多问题,但肯定的一个问题是你可以使用用户名作为密码登录。