linux - 更智能、更简洁的方法来匹配 shell 脚本中的输入变量?

标签 linux bash shell unix ksh

我有一个文件,其中包含许多独特项目的列表,对于这个例子,我使用的是用户 ID。我脚本的开始部分应该向运行脚本的用户显示列表并允许他们选择其中一个 ID。然后脚本应该交叉检查用户对原始文件所做的选择,如果匹配,它应该提供一条消息,建议匹配并继续脚本。如果不匹配,脚本应该通知用户并退出。

我当前的脚本可以做到这一点,但我想知道是否有任何方法可以让它更智能/更简洁,也许使用数组?当前脚本:

这是我在这个网站上的第一篇文章,对于在发布过程中出现的任何错误,我深表歉意。

FILE=testfile
IDLIST="$(awk '{print $1}' $FILE)"
echo "$IDLIST"
echo "\nSelect one of the options"
read input
OUTPUT="$(for i in $IDLIST
          do
               if [[ $i = $input ]]
                    then
                    echo "Matched."
               fi
          done)"

if [[ -z $OUTPUT ]]
    then
    echo "Invalid choice."
    exit 0
    else
    ID=$input
fi

echo "It is a match, continuing with script"

最佳答案

如您所想,有很多方法可以做到这一点。一种是使用 select 代替:

PS3="Select an ID: "
select id in $(cut -d ' ' -f 1 testfile)
do
  [[ -z $id ]] && echo "Pick a number" || break
done
echo "You selected $id"

关于linux - 更智能、更简洁的方法来匹配 shell 脚本中的输入变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20578236/

相关文章:

linux - 实现可移植的文件锁定机制

linux - 修剪 PS1 的工作目录路径

linux - 如何在/dev/fd下添加新的文件描述符?

linux - 在被定界符分割的文件的每一行上将 Bash 脚本添加到 mkdir?

linux - 向现有 PDF 文件添加裁剪标记

linux - 有什么方法可以消除 sshfs 的时滞?

Bash 命令值赋值

c - 编写重复的 gdb 作业脚本

shell - cat - 将文件内容合并为一个大文件

linux - Linux 控制台中的 system() 和 type 命令之间的主要区别是什么?