将用户输入与文件内的列表进行比较

时间:2015-03-23 06:53:37

标签: linux shell unix

感谢您的时间。

我对SHELL SCRIPT有一个要求,我要获取用户输入并将其与文本文件中的内容列表进行比较,看看输入是否与该行中的任何一行匹配文本文件。

以下是场景: cat fruits.txt 苹果 橙子 芒果 葡萄

输入水果名称:醋栗 那不在商店里!! 输入水果名称:apple 欢迎来到苹果世界!

非常感谢任何帮助。 :(

1 个答案:

答案 0 :(得分:0)

我们假设您有文件fruitlist.txt,其中存储了水果(或其他)的列表。

fruitlist.txt的内容:

red apple
green apple
orange
mango
grapes

请注意,每个水果后都有换行符。

以下bash脚本需要水果列表文件的路径作为它的第一个参数:

#!/bin/bash

listFile=$1

if [ -f "$listFile" ]; then
    echo "Type 'q' or 'Q' to exit the script."
    echo "-----------------------------------"
    while true; do
        read -p "Type the fruit name: " fruit
        if [ "$fruit" = "q" ] || [ "$fruit" = "Q" ]; then
            break
        elif [ "$(grep "$fruit" "$listFile")" = "$fruit" ]; then
            echo "The fruit '$fruit' is in the list."
        else
            echo "The fruit '$fruit' is not in the list."
        fi
    done
    echo "-----------------------------------"
else
    echo "No fruit list file specified."
fi

exit 0

声明

if [ -f "$listFile" ]; then

测试水果列表文件是否存在。

命令

read -p "Type the fruit name: " fruit

将水果名称读入变量水果。

第一个if in the endless while循环

if [ "$fruit" = "q" ] || [ "$fruit" = "Q" ]; then
    break

检查用户是否要退出脚本。以下

elif [ "$(grep "$fruit" "$listFile")" = "$fruit" ]; then
    echo "The fruit '$fruit' is in the list."
else
    echo "The fruit '$fruit' is not in the list."
fi

检查输入的水果是否可以在水果列表文件中找到。单独的grep命令会找到包含水果名称的每一行。让我们说你有一个水果有两个名称部分,如红苹果'绿苹果'用户输入红色'如果是真的。现在"" =""在if语句中确保,如果用户输入' red',则该语句将不为真,因此在列表中找不到水果。