为什么我的Bash脚本出现unexpected-token语法错误?
脚本语法错误分析与修正
这个错误和撇号没关系,问题出在if语句的语法上。bash里执行if判断时,[ -r $i ]后面必须用分号或者换行来分隔,才能接上then。你现在把if [ -r $i ] then写在同一行却没加分号,shell解析时会把then当成条件的一部分,导致语法混乱,才出现了unexpected token ;;的错误。
修正后的代码如下:
#!/bin/bash for i in * do echo "Do you want to check rights for $i (y/n)" read marzi if [ "$marzi" = 'y' ] then echo 'which commands to check? ' read check case "$check" in r) if [ -r "$i" ]; then echo 'True'; else echo 'False'; fi ;; w) if [ -w "$i" ]; then echo 'True'; else echo 'False'; fi ;; x) if [ -x "$i" ]; then echo 'True'; else echo 'False'; fi ;; *) echo 'unrecognized!' ;; esac else echo "skipped $i" fi done
额外补充几个实用优化:
- 给变量
$marzi、$i加上双引号,避免文件名或输入内容包含空格时触发错误 - 统一代码缩进,提升可读性
- 每个单行
if语句的条件后都加分号,严格遵循bash语法规范
内容的提问来源于stack exchange,提问作者cocomo
相关产品推荐
相关产品推荐

