用户名和传递登录循环bash

时间:2016-11-05 23:30:23

标签: bash while-loop grep

即使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

1 个答案:

答案 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

您可能还想重新考虑如何检查凭据。两次使用同一个文件可能会遇到很多问题,但肯定的一个问题是你可以使用用户名作为密码登录。