Bash确认输入或重新输入
Bash confirm input or re enter
我有一个非常简单的 BASH 脚本,它询问用户是否愿意输入一些内容。响应是 y
或 n
如果他们输入 n
脚本将退出。
如果他们输入 y
,那么他们会被问到一些问题。最后我想请他们确认输入。
如果正确我们将继续,如果不正确我想return他们到问题重新输入信息。
到目前为止我有:
while true; do
echo -e "Enter details ? "
read yn
case $yn in
[Nn]* ) exit;;
[Yy]* )
echo -e "description"
read desc
echo -e "Address"
read address
* ) echo "Please answer yes or no.";;
esac
done
这似乎工作正常,所以我尝试添加确认.. 但那不起作用。
while true; do
echo -e "Enter details ? "
read yn
case $yn in
[Nn]* ) exit;;
[Yy]* )
echo -e "description"
read desc
echo -e "Address"
read address
echo -e "$desc - $address"
while true; do
echo -e "\nAre these details correct ? "
read conf
case $conf in
[Nn]* ) // return to enter details //
[Yy]* ) // carry on with the details entered // break;;
esac
done
* ) echo "Please answer yes or no.";;
esac
done
目的如下
用户选择y
并输入描述和地址。该页面向他们显示了他们输入的内容的摘要,并询问他们 are these details correct ?
我们是否继续以及脚本是否继续。输入错误然后脚本 return 让他们输入描述,然后输入地址。
有人可以建议如何做到这一点。
谢谢
您可以再添加一个循环级别并使用 break [n]
的可选级别指示器:
while true; do
echo -e "Enter details ? "
read yn
case $yn in
[Nn]*) exit;;
[Yy]*)
while true; do
echo -e "description"
read desc
echo -e "Address"
read address
echo -e "$desc - $address"
while true; do
echo -e "\nAre these details correct ? "
read conf
case $conf in
[Nn]* ) break 1;;
[Yy]* ) break 3;;
esac
done
done;;
*) echo "Please answer yes or no.";;
esac
done
不要为此使用 case
。
脚本示例:
#!/bin/bash
while true; do
echo -e "Enter details ?(y/n)"
read yn
if [[ $yn == "y" ]];then
echo -e "description"
read desc
echo -e "Address"
read address
echo -e "$desc - $address"
while true; do
echo -e "\nAre these details correct ? (y/n)"
read conf
if [[ $conf == "y" ]];then
echo "All done"
break
elif [[ $conf == "n" ]];then
break
else
continue
fi
done
elif [[ $yn == "n" ]];then
break
else
continue
fi
好了:
DONE=""
while [ "$DONE" != "true" ]; do
echo -e "Enter details ? "
read yn
case $yn in
[Nn]* ) exit;;
[Yy]* )
echo -e "description"
read desc
echo -e "Address"
read address
echo -e "$desc - $address"
while true; do
echo -e "\nAre these details correct ? "
read conf
case $conf in
[Nn]* )
break;;
[Yy]* )
echo "doing something with your values"
DONE="true"
break;;
esac
done
;;
* ) echo "Please answer yes or no.";;
esac
done
我有一个非常简单的 BASH 脚本,它询问用户是否愿意输入一些内容。响应是 y
或 n
如果他们输入 n
脚本将退出。
如果他们输入 y
,那么他们会被问到一些问题。最后我想请他们确认输入。
如果正确我们将继续,如果不正确我想return他们到问题重新输入信息。
到目前为止我有:
while true; do
echo -e "Enter details ? "
read yn
case $yn in
[Nn]* ) exit;;
[Yy]* )
echo -e "description"
read desc
echo -e "Address"
read address
* ) echo "Please answer yes or no.";;
esac
done
这似乎工作正常,所以我尝试添加确认.. 但那不起作用。
while true; do
echo -e "Enter details ? "
read yn
case $yn in
[Nn]* ) exit;;
[Yy]* )
echo -e "description"
read desc
echo -e "Address"
read address
echo -e "$desc - $address"
while true; do
echo -e "\nAre these details correct ? "
read conf
case $conf in
[Nn]* ) // return to enter details //
[Yy]* ) // carry on with the details entered // break;;
esac
done
* ) echo "Please answer yes or no.";;
esac
done
目的如下
用户选择y
并输入描述和地址。该页面向他们显示了他们输入的内容的摘要,并询问他们 are these details correct ?
我们是否继续以及脚本是否继续。输入错误然后脚本 return 让他们输入描述,然后输入地址。
有人可以建议如何做到这一点。 谢谢
您可以再添加一个循环级别并使用 break [n]
的可选级别指示器:
while true; do
echo -e "Enter details ? "
read yn
case $yn in
[Nn]*) exit;;
[Yy]*)
while true; do
echo -e "description"
read desc
echo -e "Address"
read address
echo -e "$desc - $address"
while true; do
echo -e "\nAre these details correct ? "
read conf
case $conf in
[Nn]* ) break 1;;
[Yy]* ) break 3;;
esac
done
done;;
*) echo "Please answer yes or no.";;
esac
done
不要为此使用 case
。
脚本示例:
#!/bin/bash
while true; do
echo -e "Enter details ?(y/n)"
read yn
if [[ $yn == "y" ]];then
echo -e "description"
read desc
echo -e "Address"
read address
echo -e "$desc - $address"
while true; do
echo -e "\nAre these details correct ? (y/n)"
read conf
if [[ $conf == "y" ]];then
echo "All done"
break
elif [[ $conf == "n" ]];then
break
else
continue
fi
done
elif [[ $yn == "n" ]];then
break
else
continue
fi
好了:
DONE=""
while [ "$DONE" != "true" ]; do
echo -e "Enter details ? "
read yn
case $yn in
[Nn]* ) exit;;
[Yy]* )
echo -e "description"
read desc
echo -e "Address"
read address
echo -e "$desc - $address"
while true; do
echo -e "\nAre these details correct ? "
read conf
case $conf in
[Nn]* )
break;;
[Yy]* )
echo "doing something with your values"
DONE="true"
break;;
esac
done
;;
* ) echo "Please answer yes or no.";;
esac
done