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