请求排查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
使用步骤:
- 将脚本保存为
check_chmod.sh - 赋予执行权限:
chmod +x check_chmod.sh - 运行脚本:
./check_chmod.sh /path/to/target/file1 /path/to/target/file2
这个脚本用grep -q实现静默检查(只返回状态码,不输出匹配内容),效率更高,同时覆盖了参数为空、文件不可读等异常场景。
内容的提问来源于stack exchange,提问作者LadyK
相关产品推荐
相关产品推荐

