Языки скриптов предназначены для того, чтобы делать именно то, что вы пытаетесь сделать. Это может быть так просто, как просто перечисление каждой команды, которую нужно выполнить, или вы можете воспользоваться некоторыми возможностями оболочки, чтобы упростить вашу работу. Когда вы работаете вещи «во время сна» всегда убедитесь, что для установки простого файл журнала, так что вы можете выяснить, что пошло не совсем верно, пока вы спали:
#!/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.
Или вы можете использовать простые массивы и циклы, чтобы сократить повторение (вы даже можете поместить список каталогов в отдельный текстовый файл, если хотите). Корпуса чрезвычайно способны выполнять все, что необходимо для администрирования системы 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')
просто сделать ваш файл_журнала выглядеть красиво. То есть:
Это самый простой, если вы заранее знаете, какие команды вы хотите исполнить, и точно такой порядок, в котором вы хотите их выполнить, вы можете просто перечислить их все, по одному в строке, в текстовом файле, положите линию shebang наверху, и вам хорошо идти. Очень похоже на то, что вы опубликовали. Ты это пробовал? –
Короткий ответ да! Но вам нужно '#!/Bin/bash' (без пробела). Вам также необходимо подтвердить, что смена каталога прошла успешно. (т. е. 'cd/some/dir && {unzip file1.zip; $ ALR_SH ...;}' Также посмотрите на 'pushd' и' popd', чтобы перейти к исходному каталогу. –
@JohnBollinger I я не пробовал это, потому что я помню, как читал на стеках, что смена каталогов была сложной. Я попробую сейчас ... ну через 1 час, потому что я просто запускал скрипт. – Amatya