编辑:

编辑:

我有clean-logs.sh以下/var/log/fleet3/zok/代码:

#!/bin/bash

for dir in /var/log/fleet3/zok/*/ ; do
    cd $(dir)
    pwd #rm -rf *
    cd ..
done

而且该文件也在迭代,不仅仅是子目录...是的,我在该目录中有子目录,并且在该子目录中有文件。怎么了?我只想循环子目录。

编辑:

当我执行脚本时,输出为:

[user@machine zok]# ./clean-logs.sh
./clean-logs.sh: line 4: cd: clean-logs.sh: Not a directory
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok

terdon的回答解决了我的问题,我用错$(variable)${variable}

答案1

我真的不明白你的问题是什么,你的脚本只会迭​​代目录。这是由最后一个确保/for dir in /var/log/fleet3/zok/*/。然而,你确实遇到了一个非常严重的问题,因为你误解了这个$(foo)结构。

$(foo)将运行命令 foo然后返回其输出。例如:

$ echo $(pwd)
/home/terdon

您似乎想使用该变量,而不是执行它,因此您的cd命令应该是:

cd "$dir"

并不是cd $(dir)

另外,如果您想删除 的每个子目录/var/log/fleet3/zok/,则不需要循环或脚本,只需执行rm -rf /var/log/fleet3/zok/*/.或者,如果您出于某种原因确实想要循环,您可以简化为:

#!/bin/bash

for dir in /var/log/fleet3/zok/*/ ; do
    rm -rf "$dir"/*
done

相关内容