linux - Shell 脚本和用户输入

标签 linux bash shell while-loop

我正在编写一个脚本,并计划使其具有交互性。这有点像寻宝游戏。该脚本基本上是向用户打招呼,并向用户提供如何继续操作的说明。

这些说明涉及一系列密码(用户输入),这些密码将根据所使用的密码显示某些信息。我计划根据日期对其中一个密码进行破解

我将保留代码进行评估,但我只是询问正确的方法是什么(什么样的循环,以及对语法的一些帮助。)

#!/bin/bash
echo "Welcome User"; sleep 2;
echo "Random greeting and intro to the game"
select yn in "Yes" "No"; do
    case $yn in
        Yes) echo "Are you ready to play?"; break;;
        No) echo "Then get ready";;
    esac
done

echo "Please enter your first password"

有一个单独的文件,使用 : 作为游戏中使用的字段分隔符。我想知道循环询问密码并根据输入的内容执行的正确方法是什么。

我正在寻找一些简单的东西来读取用户输入,并根据它是否与其他文件匹配来执行一组指令(特定于每个密码),一旦输入最后一个密码,它就会完成。我猜是 while、read、if 或类似的东西。

最佳答案

要将一行用户输入读取到变量 $foo 中,请写入:

IFS= read -r foo

(IFS= 告诉它没有字段分隔符,因此它不应该丢弃任何空格;-r 告诉它反斜杠应该被视为文字反斜杠。)

您的循环可能是一个“永远”循环,这意味着它会一直循环直到遇到 break 语句:

while true ; do
    ...
    if ... ; then
        ...
        break      # jump out of the loop
    fi
    ...
done

我不知道你所说的“[用户输入]是否与其他文件匹配”是什么意思 - 听起来另一个文件非常复杂,带有字段分隔符等等 - 但你很可能希望将另一个文件读入内存,将其字段存储在适当的变量中:

IFS=: read -r field1 field2 field3 < the_other_file

关于linux - Shell 脚本和用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21665057/

相关文章:

linux - R stats - 分配大矩阵/Linux 时的内存问题

linux - 为什么需要安装 Java 才能安装 JavaEE6 SDK?

linux - linux 中的 sed 命令

linux - xargs -0 产生新行

bash - 使用与不使用 test 时 bash 表达式的求值顺序

bash - 在 Bash 中获取目录的父目录

arrays - 如何正确地将 bash 数组扩展为参数

linux - 验证是否在范围内找到条目

bash - 如何在 bash 中使用 declare -x

linux - shell:使用sed替换文件中的字符串