更聪明,更精简的方法来匹配shell脚本中的输入变量?

时间:2013-12-14 00:24:15

标签: 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"

1 个答案:

答案 0 :(得分:1)

你可以想象,有很多方法可以做到这一点。一个是使用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"