2016-08-25 5 views
0

whiptail 대화 상자에 사용자가 입력 한 올바른 장치를 확인했는지 또는 사용자가 잘못된 내용을 입력했는지 확인하고 싶습니다.Bash - 사용자 입력을 배열과 비교하십시오.

나는 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) 

은 "$ ALL_DEVICES"나는거야 :

이의 그 사용자의 입력을 가정 해 보자 wlan0 eth0를 :

내 코드입니다 ETH wlan0 wlan1

어떻게 사용자에게 입력이 올바르다는 것을 알려줍니다 : wlan0, but 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 

당신에게 대단히 감사를

+0

일반적으로, 'grep | awk | tr | sed는 아마 하나의 Awk 스크립트로 리팩터링되는 것이 더 낫다. 일반 아이디어는 [grep의 쓸모없는 사용] (http://www.iki.fi/era/unix/award.html#grep)을 참고하십시오. – tripleee

+0

'ifconfig -a | awk '/ 이더넷/{printf ("% s % s", s, $ 1); – tripleee

+0

팁을 주셔서 감사합니다 –

답변

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 

더 단순화 될 수 있지만이 단계를 읽을 수 있습니다 할 것. 먼저 문자열 배열을 검색하고 장치를 찾은 다음 사용자 입력과 비교하여 찾는 방법에 대해 글을 쓰십시오. 마지막 단계는 값이 발견되었는지 여부를 명확히하는 것입니다.

+0

죄송하지만, 내가 eth0 만 입력해도 작동하지 않습니다. –

+0

아, 죄송합니다. 스크립트의 논리를 즉시 알지 못했습니다. 이제 장치의 입력과 사용자 입력에서 배열을 수행하여 주석을 편집했습니다. 루프와 비교하는 논리를 전환했습니다. 지금 괜찮을거야. – Martin

+0

Martin 대단히 감사합니다. 이것은 작동 중이다. –