Linux 如何为以下内容编写shell(.sh)脚本

Linux 如何为以下内容编写shell(.sh)脚本,linux,shell,unix,Linux,Shell,Unix,我是linux/unix shell脚本新手,我有几十个项目要为其设置Subversion文件夹(最终我会使用Git lol)。如何编写脚本来执行以下操作: #!/bin/bash svnadmin create /var/www/svn/$1 svn import /var/www/$1 file:///var/www/svn/$1 chmod -R 777 var/www/svn/$1 chown -R apache.apache var/www/svn/$1 find . -type d

我是linux/unix shell脚本新手,我有几十个项目要为其设置Subversion文件夹(最终我会使用Git lol)。如何编写脚本来执行以下操作:

#!/bin/bash
svnadmin create /var/www/svn/$1
svn import /var/www/$1 file:///var/www/svn/$1
chmod -R 777 var/www/svn/$1
chown -R apache.apache var/www/svn/$1
find . -type d | xargs -I {} ./doIt.sh {}
  • 获取文件夹中所有子文件夹的列表
  • 对于每个子文件夹,使用它执行以下命令:
  • 。。。执行它


    感谢您的帮助。

    这对您有用吗

    #!/bin/bash
    for FILE in `ls`
    do
        if test -d $FILE
        then      
            svnadmin create /var/www/svn/$FILE
            svn import /var/www/$FILE file:///var/www/svn/$FILE
            chmod -R 777 /var/www/svn/$FILE
            chown -R apache.apache /var/www/svn/$FILE
        fi
    done
    
    保存后,在脚本上执行
    chmod+x{name of file}
    ,使其可执行
    /{name of file}
    sh{name of file}

    如果您递归地需要当前文件夹中的所有子文件夹:

    #!/bin/bash
    for FILE in `find . -type d`
    do
        if test -d $FILE
        then      
            svnadmin create /var/www/svn/$FILE
            svn import /var/www/$FILE file:///var/www/svn/$FILE
            chmod -R 777 /var/www/svn/$FILE
            chown -R apache.apache /var/www/svn/$FILE
        fi
    done
    

    如果您有任何问题,请发表意见。

    这对您有用吗

    #!/bin/bash
    for FILE in `ls`
    do
        if test -d $FILE
        then      
            svnadmin create /var/www/svn/$FILE
            svn import /var/www/$FILE file:///var/www/svn/$FILE
            chmod -R 777 /var/www/svn/$FILE
            chown -R apache.apache /var/www/svn/$FILE
        fi
    done
    
    for i in `find -maxdepth 1 -type d`; do
      svnadmin create "/var/www/svn/$i"
      svn import "/var/www/$i" "file:///var/www/svn/$i"
      chmod -R 777 "var/www/svn/$i"
      chown -R apache.apache "var/www/svn/$i"
    done
    
    保存后,在脚本上执行
    chmod+x{name of file}
    ,使其可执行
    /{name of file}
    sh{name of file}

    如果您递归地需要当前文件夹中的所有子文件夹:

    #!/bin/bash
    for FILE in `find . -type d`
    do
        if test -d $FILE
        then      
            svnadmin create /var/www/svn/$FILE
            svn import /var/www/$FILE file:///var/www/svn/$FILE
            chmod -R 777 /var/www/svn/$FILE
            chown -R apache.apache /var/www/svn/$FILE
        fi
    done
    
    如果您有任何问题,请评论

    for i in `find -maxdepth 1 -type d`; do
      svnadmin create "/var/www/svn/$i"
      svn import "/var/www/$i" "file:///var/www/svn/$i"
      chmod -R 777 "var/www/svn/$i"
      chown -R apache.apache "var/www/svn/$i"
    done
    
    当然,您的
    svn import
    命令不正确,并且
    chmod
    chown
    中的路径缺少
    /
    。但无论如何,这是你命令的复制粘贴


    当然,您的
    svn import
    命令不正确,并且
    chmod
    chown
    中的路径缺少
    /
    。但无论如何,这是命令的复制粘贴。

    您可以使用以下内容创建一个脚本doIt.sh:

    #!/bin/bash
    svnadmin create /var/www/svn/$1
    svn import /var/www/$1 file:///var/www/svn/$1
    chmod -R 777 var/www/svn/$1
    chown -R apache.apache var/www/svn/$1
    
    find . -type d | xargs -I {} ./doIt.sh {}
    
    然后,您可以进入要在其中查找所有子文件夹的文件夹并执行以下操作:

    #!/bin/bash
    svnadmin create /var/www/svn/$1
    svn import /var/www/$1 file:///var/www/svn/$1
    chmod -R 777 var/www/svn/$1
    chown -R apache.apache var/www/svn/$1
    
    find . -type d | xargs -I {} ./doIt.sh {}
    

    另外,您确定这一行吗:

    svn import /var/www/<sub-folder> file:///var/www/svn/<sub-folder>
    
    svn导入/var/www/file:///var/www/svn/
    
    你不是说:

    svn import /var/www/svn/<sub-folder> file:///var/www/svn/<sub-folder>
    
    svn导入/var/www/svn/file:///var/www/svn/
    

    注意:路径中缺少svn子文件夹

    您可以使用以下内容创建脚本doIt.sh:

    #!/bin/bash
    svnadmin create /var/www/svn/$1
    svn import /var/www/$1 file:///var/www/svn/$1
    chmod -R 777 var/www/svn/$1
    chown -R apache.apache var/www/svn/$1
    
    find . -type d | xargs -I {} ./doIt.sh {}
    
    然后,您可以进入要在其中查找所有子文件夹的文件夹并执行以下操作:

    #!/bin/bash
    svnadmin create /var/www/svn/$1
    svn import /var/www/$1 file:///var/www/svn/$1
    chmod -R 777 var/www/svn/$1
    chown -R apache.apache var/www/svn/$1
    
    find . -type d | xargs -I {} ./doIt.sh {}
    

    另外,您确定这一行吗:

    svn import /var/www/<sub-folder> file:///var/www/svn/<sub-folder>
    
    svn导入/var/www/file:///var/www/svn/
    
    你不是说:

    svn import /var/www/svn/<sub-folder> file:///var/www/svn/<sub-folder>
    
    svn导入/var/www/svn/file:///var/www/svn/
    


    注意:路径中缺少svn子文件夹

    我认为它不会在您从中运行的目录下查找子目录。否,它将只获取当前文件夹中的文件夹。如果您递归地需要它,则必须使用
    find
    。你没有提到递归。我将在中编辑它。
    -l
    标志必须删除,否则您将遍历大量垃圾,而不仅仅是文件名。在
    svn的情况下,递归迭代没有意义,因为它从指定路径递归导入。这个评论实际上是误导性的,而且它不是由OP.@Dropout-er发表的。。。我的意思是,为什么不带参数的
    ls
    呢?我想它不会在运行from的目录下查找子目录。否,它只会获取当前文件夹中的文件夹。如果您递归地需要它,则必须使用
    find
    。你没有提到递归。我将在中编辑它。
    -l
    标志必须删除,否则您将遍历大量垃圾,而不仅仅是文件名。在
    svn的情况下,递归迭代没有意义,因为它从指定路径递归导入。这个评论实际上是误导性的,而且它不是由OP.@Dropout-er发表的。。。我的意思是,为什么不使用无参数的
    ls
    ?如果它需要应用于所有子目录(根据问题陈述),那么我认为我们不必为findThanks keltar设置“-maxdepth 1”条件,以便进行脚本、路径和语法更正。对于单深度子目录,您也是正确的(我的错误在于没有提前指定,对不起,各位)。请编辑chmod和chown。。您在路径的开头缺少了a/它是故意从问题中复制的,我明确指出它很可能是不正确的。问题是关于目录的迭代,答案也是——从我的角度看,我说不出来,也许这就是运行这些命令的全部想法。如果它需要应用于所有子目录(根据问题陈述),那么我认为我们不必在findThanks keltar中设置“-maxdepth 1”条件,用于脚本以及路径和语法更正。对于单深度子目录,您也是正确的(我的错误在于没有提前指定,对不起,各位)。请编辑chmod和chown。。您在路径的开头缺少了a/它是故意从问题中复制的,我明确指出它很可能是不正确的。问题是关于目录的迭代,答案也是一样——从我的角度看,我说不上来,也许这就是运行这些命令的全部想法。