跟进别人的问题标题为"直到用户输入等于做什么"。我的脚本要求用户输入文件名。该脚本必须搜索该文件。如果目录中不存在该文件,则必须再次提示用户输入文件名,直到它们输入存在的文件为止(必须保持为真,不退出程序)。它看起来像什么?:
printf "Enter filename: "
read ifile
while [[ ! -e "$ifile" ]]
do
printf "File $ifile not found! "
done
当输入不存在的文件时,我得到一个"失控"循环直到我必须取消(CNTL + C)。示例:如果文件filesa存在,但用户" fat-fingers"它作为filessa
输入filename:filessa 找不到文件filessa!找不到文件filessa!找不到文件filessa!找不到文件filessa!找不到文件filessa!找不到文件filessa! ...........开启和开启。
非常感谢任何帮助!
答案 0 :(得分:1)
试试这个
printf "Enter filename: "
read ifile
while [[ ! -e "$ifile" ]]
do
printf "File $ifile not found! \n"
printf "Enter filename: "
read ifile
done
如果用户输入了错误的文件名,则必须让他们再试一次; - )。
此外,如果用户没有输入任何内容,则会产生不同的错误。 我会将更多的扩展检查写为
printf "Enter filename: "
read ifile
while [[ ! -e "${ifile:-XXXXno_user_inputXXXX}" ]]
do
printf "File ${ifile:-XXXXno_user_inputXXXX} not found! \n"
printf "Enter filename: "
read ifile
done
var语法${var:-defaultValue}
可以读作"如果变量$var
为空,则打印:-
后的值作为替换值。
对XXXXno_user_inputXXXX
的迂腐反对意见是,您的目录中可能存在一个名为XXXX_no_user_inputXXXX
的文件,因此您必须确定该文件是否为你项目的风险很大。
IHTH
答案 1 :(得分:1)
until
中有一个bash
循环:
until [[ -e $ifile ]]; do
[[ -z $ifile ]] || printf "File $ifile not found!\n"
read -p "Enter filename: " ifile
done
实际上,until
也是POSIX标准的一部分,尽管符合POSIX的示例不那么简洁:
until [ -e "$ifile" ]; do
[ -z "$ifile" ] || printf "File $ifile not found!\n"
printf "Enter filename: "
read ifile
done