Bash - 将用户输入与数组进行比较

Bash - Compare User input with array

我想验证用户是否在 whiptail 对话框中输入了正确的设备,或者用户是否输入了错误的内容。

我用谷歌搜索了 2 天,找不到任何类似的 question/issue。

这是我的代码:

ALL_DEVICES=$(ifconfig -a | grep Ethernet | awk '{print }' | tr '\n' ' ' | sed -e 's/[[:space:]]*$//')
U_INPUT=$(whiptail --title "[choose]" --inputbox "Please input your device" 0 0 all 3>&1 1>&2 2>&3)

如果我 echo "$ALL_DEVICES" 我会得到:eth0 wlan0

假设用户输入:eth wlan0 wlan1

如何通知用户他输入正确:wlan0,但 eth 和 wlan1 是错误输入,因为该设备不存在。

我试过这段代码:

ALL_DEVICES=$(ifconfig -a | grep Ethernet | awk '{print }' | tr '\n' ' ' | sed -e 's/[[:space:]]*$//')
U_INPUT=$(whiptail --title "[choose]" --inputbox "Please input your device" 0 0 3>&1 1>&2 2>&3)

arr1=("$ALL_DEVICES")
arr2=("$U_INPUT")

echo "arr1 ${arr1[@]}"
echo "arr2 ${arr2[@]}"

FOUND="echo ${arr1[*]} | grep ${arr2[*]}"

if [ "${FOUND}" != "" ]; then
   echo "Valid interfaces: ${arr2[*]}"
else
   echo "Invalid interfaces: ${arr2[*]}"
fi

非常感谢

我会这样:

devices="eth0 wlan0"
input="eth0 whlan0 wlan0"

#translate output strings to array based on space
IFS='  ' read -r -a devicesa <<< "$devices"
IFS='  ' read -r -a inputa <<< "$input"


for i in "${inputa[@]}"
do
    for j in "${devicesa[@]}"; do
    if [ ${i} == ${j} ]; then
        correct=1
        break
    else
        correct=0
    fi
    done
    if [ $correct = 1 ]; then
        echo "device $i is correct"
    else
        echo "device $i isnt correct"
    fi

done

也许它可以更简化,但您可以阅读操作步骤。首先遍历字符串数组,找到设备,然后将它们与用户输入进行比较,并写下有关查找它的信息。最后一步是澄清是否找到该值。