Ubuntu系统自定义后安装脚本Bash无限循环问题排查求助
解决你的Ubuntu后安装脚本无限循环问题
嘿,我看了你的脚本,逻辑框架是对的,但有两个小细节可能导致你碰到的无限循环,还有一个潜在的权限问题:
首先说无限循环的核心原因——输入匹配的鲁棒性不够。比如你不小心输入了带前导空格的 yes,或者输入了y es这种中间带空格的内容,这时候[Yy]*的匹配规则会失效,脚本就会一直跳到*分支提示你输入yes/no,形成无限循环。
另外还有个小坑:第二个apt install XYZ -y没加sudo,执行到这里会因为权限不足失败,虽然这不是循环的原因,但会导致XYZ安装失败。
给你改好的脚本
while true; do read -p "Do you want to install program XY and XYZ? " yn # 先清理输入的前后空格,统一转成小写,避免格式问题干扰匹配 yn=$(echo "$yn" | xargs | tr '[:upper:]' '[:lower:]') case $yn in yes ) sudo apt install XY XYZ -y; break;; no ) break;; * ) echo "Please answer yes or no.";; esac done
关键改进点:
- 加了输入预处理:用
xargs去掉前后空格,tr把输入转为全小写,不管你输入Yes、YES、YES都能被正确识别成yes,彻底避免格式问题导致的循环。 - 把两个
apt install合并成一条命令,既减少了sudo的重复使用,安装效率也更高,还能确保权限足够。 - 把匹配规则改成明确的
yes/no,避免之前模糊匹配的意外(比如输入yellow也会触发安装,这估计不是你想要的)。
如果你想更灵活,允许输入y/n这种短指令,可以把case分支改成这样:
case $yn in y|yes ) sudo apt install XY XYZ -y; break;; n|no ) break;; * ) echo "Please answer yes or no (y/n).";; esac
这样输入y、yes甚至Y(转小写后都是y)都能触发安装,输入n/no就退出,更符合日常使用习惯。
内容的提问来源于stack exchange,提问作者dikayx
相关产品推荐
相关产品推荐

