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

请求排查Nebula Level03问题缓解脚本的'done'附近语法错误及提供检查chmod字符串的Bash脚本

解决Nebula Level03中的脚本语法错误及文件检查脚本需求

一、修复循环脚本的语法错误

你遇到的done附近语法错误,核心问题出在条件判断的字符串比较符号上:在标准POSIX Shell的[ ]测试结构中,字符串比较必须用=而非==——==是Bash的扩展语法,如果当前执行脚本的Shell不是Bash(比如系统默认是dash),就会触发语法解析错误,进而影响整个循环结构导致done附近报错。

另外,为了避免空值或特殊字符干扰,建议把grep的结果用引号包裹。修正后的脚本如下:

for i in /home/flag03/writable.d/* ; do 
    if [ "$(grep -c "chmod" "$i")" = 0 ]
    then 
        (ulimit -t 5; bash -x "$i")
    fi 
    rm -f "$i" 
done

额外优化提示:如果writable.d目录为空,通配符/home/flag03/writable.d/*会原样输出字符串,可能触发错误。可以开启nullglob选项避免这种情况:

shopt -s nullglob  # 开启后,空目录的通配符会返回空值
for i in /home/flag03/writable.d/* ; do 
    if [ "$(grep -c "chmod" "$i")" = 0 ]
    then 
        (ulimit -t 5; bash -x "$i")
    fi 
    rm -f "$i" 
done
shopt -u nullglob  # 关闭选项恢复默认行为

二、检查文件中是否存在"chmod"的Bash脚本

这里给你写了一个可复用的脚本,支持多文件检查,还做了边界情况处理:

#!/bin/bash

# 检查用户是否传入参数
if [ $# -eq 0 ]; then
    echo "用法: $0 <文件路径1> [文件路径2] ..."
    exit 1
fi

for file in "$@"; do
    # 先验证文件是否存在且可读
    if [ ! -f "$file" ] || [ ! -r "$file" ]; then
        echo "⚠️  文件 $file 不存在或不可读"
        continue
    fi

    # 静默检查是否包含"chmod"字符串
    if grep -q "chmod" "$file"; then
        echo "✅ 文件 $file 中存在'chmod'字符串"
    else
        echo "❌ 文件 $file 中不存在'chmod'字符串"
    fi
done

使用步骤:

  1. 将脚本保存为check_chmod.sh
  2. 赋予执行权限:chmod +x check_chmod.sh
  3. 运行脚本:./check_chmod.sh /path/to/target/file1 /path/to/target/file2

这个脚本用grep -q实现静默检查(只返回状态码,不输出匹配内容),效率更高,同时覆盖了参数为空、文件不可读等异常场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:32:35