2017-08-04 63 views
0

您好,我想知道将命令作为变量传递给提示的正确方法是什么?例如,我有:在bash中循环读取,直到给出正确的输入

#!/bin/bash 
clear ; 
i=`ifconfig tap0 | awk '{print $2}' | egrep "([0-9]{1,3}[\.]){3}[0-9]{1,3}"` 

read -p "Enter your IP: " prompt 
     if [[ $prompt == i ]] 
    then 
     echo "Correct IP, congrats" 
    else 
read -p "Wrong IP, try again: " prompt 
     if [[ $prompt == i ]] 
    then 
     echo "Correct IP, congrats" 
    else 
     echo "Wrong IP for the second time, exiting." 
    exit 0 
fi 

我确信这可以循环,但我不知道如何。我开始使用bash脚本,所以我学习了肮脏的方式:) 谢谢

回答

2

只需从stdin把你的病情在while循环,也就是说,只要你的条件没有被满足,read,并要求适当输入。

#!/bin/bash 
clear 
i=$(ifconfig tap0 | awk '{print $2}' | egrep "([0-9]{1,3}[\.]){3}[0-9]{1,3}") 
read -p "Enter IP address: " prompt 
while [ "$i" != "$prompt" ] ; do 
    echo "Wrong IP address" 
    read -p "Enter IP address: " prompt 
done 
echo "Correct IP, congrats" 

如果你想的错误输入的最大金额后中止,添加计数器

#!/bin/bash 

MAX_TRIES="5" 

clear 
i="$(ifconfig tap0 | awk '{print $2}' | egrep "([0-9]{1,3}[\.]){3}[0-9]{1,3}")" 
t="0" 
read -p "Enter IP address: " prompt 
while [ "$i" != "$prompt" -a "$t" -lt "$MAX_TRIES" ] ; do 
    echo "Wrong IP address" 
    t="$((t+1))" 
    read -p "Enter IP address: " prompt 
done 

if [ "$t" -eq "$MAX_TRIES" ] ; then 
    echo "Too many wrong inputs" 
    exit 1 
fi 

echo "Correct IP, congrats" 
exit 0 
+0

是真棒。非常感谢你:) – Petr