Bash shell脚本翻转目录并执行一些操作

时间:2009-06-24 17:18:09

标签: bash

下午好,我对我遇到问题的脚本有疑问。几年前我做了类似的事情,基于此(基于不同的服务器)。我需要从一个目录中运行脚本,该目录中包含许多目录,并且每个目录都要创建一个目录并更改其所有权。脚本是:

#!/bin/bash
for DIR in *;
do 
mkdir $DIR/photos2; 
chown apache:apache $DIR/photos2; 
chmod 777 $DIR/photos2; 
done

尝试运行时,我得到 - 意外标记“do”

附近的语法错误

我确信这是愚蠢的,我很遗憾,任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:2)

你可能想做这样的事情:

#!/bin/bash
for DIR in *; do
    if [ -d "$DIR" ]; then 
        mkdir "$DIR/photos2"
        chown apache:apache "$DIR/photos2"
        chmod 777 "$DIR/photos2"
    fi
done
  • “do”的错误是因为bash是面向行的,并且期望“do”在同一行上。当然,您可以在行尾添加\。编辑:这是不正确的。大概是一个没那么受过教育的猜测。
  • 当命令位于不同的行时,不需要分号。
  • 如果您在任何文件名中有空格,则需要在$ DIR周围引用。

答案 1 :(得分:2)

我看到脚本处于DOS格式时会发生有趣的事情 您是否有机会在Windows平台上编写代码并尝试从其他地方的bash shell运行代码?

在bash shell上,通常会有一个名为dos2unix的命令,如果找到它,请尝试运行,

dos2unix scriptname

然后再次运行脚本。


还有一项检查,你确定你有一个错误说“意外令牌'做''而不是'完成'吗? 无论如何,我建议你阅读for loop at the bash guide


同时,这应该从基本目录开始工作(而你的文件名没有SPACE字符)。

#!/bin/bash
for DIR in $(find . -type d);
do 
    mkdir $DIR/photos2; 
    chown apache:apache $DIR/photos2; 
    chmod 777 $DIR/photos2; 
done

答案 2 :(得分:1)

for DIR in *
do 

for DIR in *; do