如何使用读行在 while 循环中添加变量值?

如何使用读行在 while 循环中添加变量值?

我需要编写一个密码输入 bash 脚本。Bash 文件必须从命名管道获取值,直到收到 *。

例如:
Bash 获取 1 2 5 6 7 8 ... 5 * (按下键盘后显示每个数字)

脚本中的变量必须是:Result = 125678...5
然后我必须将其与我的验证密码进行比较

例如(我不知道 bash 语法):

while read line && input != "*"
do
passWord_input += line


if(passWord_input == verifPassword)
    echo "access granted"
else
    echo "access denied

答案1

不要试图重新发明轮子:

passWord_input=""
while [[ "$passWord_input" != "$verifPassword" ]]; do
    read -s -r -p "Enter Password: " passWord_input
done

echo "valid password entered"

https://www.gnu.org/software/bash/manual/bash.html#index-read

答案2

我想不出这样做的充分理由(除非作为家庭作业练习),但是是的,在 bash 中,您可以“使用 read 在 while 循环中添加变量”。特别是,运算符man bash的注释+=

   In  the context where an assignment statement is assigning a value to a
   shell variable or array index, the += operator can be used to append to
   or  add  to  the variable's previous value.  
   .
   .
   .                                                             When  ap‐
   plied  to  a  string-valued variable, value is expanded and appended to
   the variable's value.

例如:

#!/bin/bash

declare +i password_input=""
while IFS= read -s -r -n 1 c; do 
  case $c in 
    \*) break
        ;; 
     *) password_input+=$c
        ;; 
  esac
done

这些-n 1参数允许您读取单个字符而不是整行。取消设置IFS变量允许输入包含否则将被字段拆分所消耗的字符(在默认 IFS 的情况下,这可能是也可能不是一个好主意 - 是否应该允许密码包含空格?)。

+i即使用户输入的是全数字序列,似乎也不需要显式声明,但它清楚地表明其意图是追加而不是求和。

仅供参考,测试字符串相等性的 bash 语法是[[ $str1 == $str2 ]]

相关内容