Bash脚本if条件判断卡住、while循环运行正常无响应问题求解
问题排查步骤
- 检查
ext变量是否初始化
你的脚本没有给ext赋初始值0,直接在while条件中判断$ext -eq 0时,若ext为空会触发语法错误,部分shell会进入交互等待状态,看起来就像卡住。可先在脚本开头添加ext=0确认变量初始化。 - 检查是否存在循环逻辑死循环
你修改后的逻辑存在逻辑漏洞:初始状态下name1和name2并不相等,会进入if [ "$name1" != "$name2" ]分支,该分支只有空操作:,既没有修改ext的值,也没有修改name1/name2的值,导致循环条件$ext -eq 0永远成立,进入死循环空转,表现为卡住无响应。 - 检查
shuf命令调用是否正常
排除上面两个问题后如果还卡住,先确认cars.csv文件是否存在、是否有可读权限、文件是否不为空:如果cars.csv路径错误/不存在,shuf会默认从标准输入读取内容,就会出现你说的可以输入文本但脚本无响应的情况。可手动执行命令shuf -n 1 cars.csv | cut -d";" -f1测试是否能正常返回结果。 - 开启调试模式定位卡住位置
在脚本开头添加set -x开启调试输出,运行时会打印每一行执行的命令,能明确看到是卡在while循环的条件判断、还是shuf命令执行步骤。
修复后的参考脚本
如果你的需求是确保name1和name2不重复,可直接简化逻辑如下,不需要额外的ext变量做状态标记:
#!/bin/bash name0="Car name X" name1="Car name Y" name2="Car name Z" echo "$name0" echo "$name1" echo "$name2" # 只有当name1等于name2时才进入循环随机取值,直到两者不相等就退出 while [ "$name1" = "$name2" ] do name1=$(shuf -n 1 cars.csv | cut -d";" -f1) name1c=$(echo "$name1" | cut -d" " -f1) done
内容的提问来源于stack exchange,提问作者iAlphxJz
相关产品推荐
相关产品推荐

