转到目录,运行脚本,更改目录,重复

时间:2015-06-25 01:27:15

标签: bash unix

我对bash脚本几乎一无所知。我必须运行一些脚本(由其他人创建),我必须从特定目录运行。一旦脚本停止运行(1小时)。我从提示符更改目录,转到另一个目录并运行另一个脚本(通常是相同的csh文件,但具有不同的参数)。我必须这样做25次。我想知道是否有办法创造一个" sh"可以自动化该过程的文件。这样我就可以通过一夜之间的运行来获得一些时间。

#! /bin/bash

cd /dev/D/Folder1 

unzip file1.zip

$ALR_SH/someonesscript.csh -DIR $PWD -otherfilter blah1


cd /dev/D/Folder2

 unzip file2.zip

$ALR_SH/someonesscript.csh -DIR $PWD -otherfilter blah2

.
.
.

and so on.

谢谢,如果这太模糊,我很抱歉。我实际上无法访问存储" csh"的文件夹。我正在运行的档案,所以我不知道它的特点,也不能分享它。

1 个答案:

答案 0 :(得分:1)

脚本语言用于完成您正在尝试的操作。它可以像列出您需要执行的每个命令一样简单,也可以利用一些shell功能来简化您的工作。当你在“睡觉时”运行时,总是确保设置一个简单的日志文件,这样你就可以找到睡觉时不正常的事情:

#!/bin/bash

logfile=/path/to/log/file.txt       ## keep a simple logfile

cd /dev/D/Folder1 &>/dev/null && {  ## execute script on successful change into directory

    printf "%s - excuting someonesscript in %s\n" "$(date '+%b %e %T')" "$PWD" >> "$logfile"
    unzip file1.zip
    $ALR_SH/someonesscript.csh -DIR $PWD -otherfilter blah1 && \
    printf "%s - script in %s succeeded\n" "$(date '+%b %e %T')" "$PWD" >> "$logfile" || \
    printf "%s - script in %s FAILED\n" "$(date '+%b %e %T')" "$PWD" >> "$logfile"
}

...

and so on.

或者您可以使用简单的数组和循环来缩短重复次数(如果您愿意,甚至可以将目录列表放在单独的文本文件中)。 Shell非常有能力执行Linux系统管理所需的任何操作。

以下只是一个使用公共基目录和一个包含每个子目录的数组的简单示例,用于更改和执行脚本。注意:始终确保提供<更改目录时强>绝对路径或正确的相对路径(我建议使用绝对路径,直到您习惯使用相对路径跳过):

#!/bin/bash

logfile=/path/to/log/file.txt       ## keep a simple logfile
basedir=/dev/D                      ## common base directory name

dirarray=( Folder1                  ## array of foldernames to change to
           Folder2 )

for i in "${dirarray[@]}"; do       ## for each folder in dirarray

    if cd "${basedir}/${i}" &>/dev/null; then   ## if successful change to directory

        ## execute commands and log success/failure
        printf "%s - excuting someonesscript in %s\n" "$(date '+%b %e %T')" "$PWD" >> "$logfile"
        unzip file1.zip
        $ALR_SH/someonesscript.csh -DIR $PWD -otherfilter blah1 && \
        printf "%s - script in %s succeeded\n" "$(date '+%b %e %T')" "$PWD" >> "$logfile" || \
        printf "%s - script in %s FAILED\n" "$(date '+%b %e %T')" "$PWD" >> "$logfile" 

    else

        ## log failure to change into directory
        printf "%s - failed to change to directory '%s'\n" "$(date '+%b %e %T')" "$i" >> "$logfile"

    fi

done

早上,只需查看/path/to/log/file.txt,了解情况如何。

Jun 24 20:59:26 - excuting someonesscript in /home/david/scr/tmp/stack/dat/Folder1
Jun 24 20:59:59 - script in /home/david/scr/tmp/stack/dat/Folder1 succeeded
Jun 24 20:59:59 - failed to change to directory 'Folder2'
Jun 24 21:01:21 - excuting someonesscript in /home/david/scr/tmp/stack/dat/Folder3
Jun 24 21:01:21 - script in /home/david/scr/tmp/stack/dat/Folder3 succeeded

注意:所有$(date '+%b %e %T')语法只是为了让您的日志文件看起来很漂亮。即: