Kali Linux下Bash脚本报Syntax error:Bad for loop variable错误求助
解决Kali Linux中Bash脚本循环变量语法错误问题
你的问题我很熟悉,这本质是Shell解释器兼容性导致的,我来帮你一步步解决:
错误原因分析
你的脚本用了Bash特有的C风格for循环(((row=1;row<=5;row++))这种写法),但如果是用sh pra20.sh执行脚本,Kali Linux里的sh默认链接到dash——这是个轻量级POSIX Shell,不支持Bash的这种扩展语法,所以会抛出Syntax error: Bad for loop variable的错误。
另外还要提个小细节:脚本里的Clear是大写的,Bash中清屏命令是小写的clear,大写会触发Clear: command not found的报错,记得先把这个改掉。
解决方案(三种可选)
1. 直接用Bash执行脚本
跳过系统默认的sh解释器,明确调用bash来运行脚本:
bash pra20.sh
2. 给脚本加可执行权限后直接运行
你的脚本开头已经写了#!/bin/bash(shebang声明),只要给脚本加上执行权限,系统就会自动用指定的bash来执行:
chmod +x pra20.sh ./pra20.sh
3. 修改脚本为POSIX兼容写法(适配dash)
如果需要脚本在dash等POSIX Shell下也能运行,把C风格循环改成标准写法,比如用while循环:
#!/bin/bash clear row=1 while [ $row -le 5 ]; do col=1 while [ $col -le $row ]; do echo -n "$row " col=$((col + 1)) done echo " " row=$((row + 1)) done
或者用seq命令配合for-in循环:
#!/bin/bash clear for row in {1..5}; do for col in $(seq 1 $row); do echo -n "$row " done echo " " done
验证效果
修改后执行脚本,应该能正确输出如下内容:
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
内容的提问来源于stack exchange,提问作者Sumit Sharma
相关产品推荐
相关产品推荐

