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

Bash脚本修改文件权限无效问题排查求助

问题分析与修复方案

核心问题1:命令行参数未传递到权限修改逻辑

你的脚本没有接收并传递命令行传入的g+r/g-r参数:result函数调用changePermissions时没传参,同时脚本也没把命令行参数($1)传递给核心处理函数,导致权限修改逻辑根本不知道要执行哪种操作。

核心问题2:权限判断逻辑错误

mod1和mod2里用[ ! -r $FILE_PATH ]判断的是当前执行脚本的用户是否有读权限,而非文件的组权限状态。比如就算组没有读权限,当前用户如果是文件所有者,-r依然会返回真,导致判断逻辑完全失效。

修复后的完整脚本

#!/bin/bash

# 校验输入参数合法性
if [ $# -ne 1 ] || [[ ! "$1" =~ ^g[+-]r$ ]]; then
    echo "用法: $0 [g+r|g-r]"
    exit 1
fi

FILE_PATH=~/myFile.txt

function list()
{
    ls -l "$FILE_PATH"
}

# 专门检查文件的组读权限状态
function has_group_read() {
    local perm=$(stat -c "%A" "$FILE_PATH")
    [[ "${perm:4:1}" == "r" ]]
}

function mod1()
{
    if ! has_group_read; then
        chmod g+r "$FILE_PATH"
        echo "已添加组读权限"
    else
        echo "文件已具备组读权限!"
    fi
}

function mod2()
{
    if has_group_read; then
        chmod g-r "$FILE_PATH"
        echo "已移除组读权限"
    else
        echo "文件原本就没有组读权限!"
    fi
}

function changePermissions()
{
    if [ "$1" = "g+r" ]; then
        mod1
    elif [ "$1" = "g-r" ]; then
        mod2
    fi
}

function result()
{
    echo "修改前权限:"
    list
    echo "---"
    changePermissions "$1"
    echo "---"
    echo "修改后权限:"
    list
}

# 将命令行参数传递给核心处理流程
result "$1"

关键修复说明

  • 新增参数校验:确保用户只能传入g+r或g-r,避免无效输入
  • 新增has_group_read函数:精准判断文件的组读权限状态,替代原有的错误判断逻辑
  • 传递命令行参数:将用户输入的参数传递到changePermissions函数,让权限修改逻辑知道要执行的操作
  • 路径加双引号:避免文件路径包含空格时出现错误
  • 优化输出:清晰展示修改前后的权限变化

内容的提问来源于stack exchange,提问作者Golden Shadow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:45:40