用户名和密码登录循环bash
虽然if语句也会启动循环,但这毫无意义,但我对bash非常陌生,所以很多事情对我来说都没有意义用户名和密码登录循环bash,bash,while-loop,grep,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 ]; th
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
[…]
在shell中不是特别特殊的语法。您正在将参数$log1=0
和]
传递给名为[
的命令,该命令从其参数中删除]
,并将其余参数传递给测试。假设$log1
包含“用户名”,结果是:
test 'username=0'
当test
获取一个参数时,它会检查该参数是否为非空字符串$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
…
您可能还想重新考虑如何检查凭据。对同一个文件进行两次grepping可能会有很多问题,但有一个问题是您可以使用用户名作为密码登录。哪个if
语句?你的问题不清楚。这是重复的,不是重复的,而是代码不同部分的不同问题我有一个文件,有两列,一列是用户名,另一列是密码,它们由用户在代码的不同部分输入,未显示,我需要它,以便它检查他们输入的用户名和密码是否与名为username\u pass的文件中的任何用户名和密码匹配。txt@AdrianFall:太好了!还有?有没有办法使用awk查找用户名的位置,并检查第二个输入是否与该行第二列中的密码匹配?