gpt4 book ai didi

bash - 如果标准输入中没有用户输入,则退出 bash 脚本

转载 作者:行者123 更新时间:2023-11-29 09:42:28 27 4
gpt4 key购买 nike

我的 bash 脚本应该获取用户输入以处理退出的特定文件,如下所示:

if [ -e "formatted_log.csv" ]
then
printf "\nPresence of formatted_log.csv file detected: It appears this script has already been run is this dir.\n"
printf "Appending can cause errors.\n"
read -e -p "Would you like to continue?[y/n]" stdin

此逻辑检查用户的输入:

if [ $stdin = "n" ] || [ $stdin = "N" ];
then
printf "\nOkay, exiting.\n"
exit;
fi
if [ $stdin != "y" ]&&[ $stdin != "Y" ]&&[ $stdin != "n" ]&&[ $stdin != "N" ];
then
printf "\nPlease use a valid input (y/n)...exiting.\n"
exit;
fi
fi

问题是,如果您只是按回车键,脚本就会像输入“y”或“Y”一样执行,我不知道为什么。我的理解是这样写的,如果用户输入 y、Y、n 或 N 以外的任何内容,它应该退出。

当你没有输入时它打印这个:

master_script.sh: line 14: [: =: unary operator expected
master_script.sh: line 14: [: =: unary operator expected
master_script.sh: line 19: [: !=: unary operator expected

但不退出——我怎样才能让它退出?

最佳答案

因为您已经用“Bash”标记了它,您应该可以使用更强大的 [[ ]] 运算符。然后你可以简化成这样:

read stdin

if [[ $stdin == [Nn] ]]; then
echo "Exiting"
exit
fi

if [[ $stdin != [YyNn] ]]; then
echo "Invalid input, exiting"
exit
fi

==(或=)和!=[[ ]] 中执行模式匹配,因此您可以在单个表达式中使用模式来检查您的输入是否有效,例如 [YyNn]

如果你想在用户输入有效内容之前请求输入,你可以像这样循环:

while [[ $stdin != [YyNn] ]]; do
read -p 'Continue? ' stdin
done

请注意,虽然在 Bash 中引用变量几乎总是好的做法,但您不必在 [[ ]] 中引用。如果您的模式在变量中,它实际上绝不能被引用,否则它不会被解释为模式。

关于bash - 如果标准输入中没有用户输入,则退出 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42422385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com