0

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

我在谷歌上搜索了 2 天,找不到任何类似的问题/问题。

这是我的代码:

ALL_DEVICES=$(ifconfig -a | grep Ethernet | awk '{print $1}' | 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 $1}' | 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

非常感谢

4

1 回答 1

0

我会这样:

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

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

于 2016-08-25T06:58:32.793 回答