You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:35:50