Linux 在bash中循环读取,直到给出正确的输入
您好,我想知道将命令作为变量传递到提示符中的正确方法是什么?例如,我有:Linux 在bash中循环读取,直到给出正确的输入,linux,bash,Linux,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" els
#!/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脚本开始,所以我学习了肮脏的方式:)
谢谢只需在循环时将您的条件放入一个
,即只要您的条件不满足,从stdin
中读取
,并请求正确的输入
#!/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
太棒了。非常感谢:)