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

cPanel服务器用户文件权限修复脚本第32行语法错误排查求助

修复cPanel用户文件权限脚本的语法错误问题

嘿,我来帮你搞定这个脚本的语法错误!你的问题出在第32行的find命令上,主要是两个Shell语法细节没处理好:

  1. 括号的转义问题:(和)是Shell的特殊字符,用来做命令分组,在find里用来组合条件时,必须用反斜杠\转义,不然Shell会误以为你要执行命令分组,直接报错。
  2. 分号的转义问题:find的-exec选项结尾的分号;也得转义成\;,否则Shell会把它当成当前命令的结束标记,而不是传给find命令处理。

错误的原代码行:

find $HOMEDIR -type f ( -name "*.pl" -o -name "*.perl" ) -exec chmod 755 {} ; -print

修复后的正确代码行:

find $HOMEDIR -type f \( -name "*.pl" -o -name "*.perl" \) -exec chmod 755 {} \; -print

另外我还发现脚本里其他几个find命令也犯了同样的分号没转义的问题,这些地方也得一起修复,不然运行时同样会出问题。还有个小细节:脚本里echo "Setting permissions for user $USER"这里应该用循环变量$user而不是$USER,不然一次性处理多个用户时,这里会显示所有传入的用户,而不是当前正在处理的那个,日志会不准确。

完整修复后的脚本:

#!/bin/bash
# Script to fix permissions of accounts
if [ "$#" -lt "1" ];then
    echo "Must specify user"
    exit;
fi
USER=$@
for user in $USER
do
    HOMEDIR=$(egrep "^${user}:" /etc/passwd | cut -d: -f6)
    if [ ! -f /var/cpanel/users/$user ]; then
        echo "$user user file missing, likely an invalid user"
    elif [ "$HOMEDIR" == "" ];then
        echo "Couldn't determine home directory for $user"
    else
        echo "Setting ownership for user $user"
        chown -R $user:$user $HOMEDIR
        chmod 711 $HOMEDIR
        chown $user:nobody $HOMEDIR/public_html $HOMEDIR/.htpasswds
        chown $user:mail $HOMEDIR/etc $HOMEDIR/etc/*/shadow $HOMEDIR/etc/*/passwd
        echo "Setting permissions for user $user"
        find $HOMEDIR -type f -exec chmod 644 {} \; -print
        find $HOMEDIR -type d -exec chmod 755 {} \; -print
        find $HOMEDIR -type d -name cgi-bin -exec chmod 755 {} \; -print
        find $HOMEDIR -type f \( -name "*.pl" -o -name "*.perl" \) -exec chmod 755 {} \; -print
    fi
done
chmod 750 $HOMEDIR/public_html
if [ -d "$HOMEDIR/.cagefs" ]; then
    chmod 775 $HOMEDIR/.cagefs
    chmod 700 $HOMEDIR/.cagefs/tmp
    chmod 700 $HOMEDIR/.cagefs/var
    chmod 777 $HOMEDIR/.cagefs/cache
    chmod 777 $HOMEDIR/.cagefs/run
fi

小提示:

写Shell脚本时,涉及到find、grep这类带有特殊字符参数的命令,一定要记得转义特殊字符,避免Shell提前解析它们。另外循环里用对变量名,能让日志和操作更准确哦。

内容的提问来源于stack exchange,提问作者Wade John Beckett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:59:12