У меня есть несколько каталогов, которые я должен обновить, и шаги являются тем же, кроме, очевидно, который каждый каталог имеет различные имена.
Я плохо знаком с созданием сценариев. Я могу сделать массив с, например. $array=('cd dir1', 'cd dir2');
и сделайте a for
цикл, который проходит каждый каталог?
пример (** я собираюсь использовать php синтаксис **):
$arr=array('cd dir1','cd dir2', 'cd dir3', 'cd dir4', 'cd dir5')
for($i=0; $<=5; $i++){
$arr[$i]
#MAKE STUFF
#MAKE MORE STUFF
cd ..
}
Я предлагаю не хранить команды в массиве, а только параметры (спасибо @steeldriver за синтаксис массива в bash):
#!/usr/bin/env bash
dirs=('dir1' 'dir2' 'dir3' 'dir4' 'dir5')
for dir in "${dirs[@]}"; do
cd "$dir"
echo "***MAKE STUFF***"
echo "***MAKE MORE STUFF***"
cd -
done
Примечание: cd -
(минус) возвращается обратно в предыдущий каталог (вместо родительского каталога), поэтому он безопаснее, чем cd ..
.
Если вы действительно хотите сохранить команды , то вам нужно выполнить элементы массива в виде команд, просто записав их:
#!/usr/bin/env bash
cmds=('cd dir1' 'cd dir2' 'cd dir3' 'cd dir4' 'cd dir5')
for cmd in "${cmds[@]}"; do
$cmd
echo "***MAKE STUFF***"
echo "***MAKE MORE STUFF***"
cd -
done
Обратите внимание, что теперь существует асимметрия в сценарий: последний cd -
предполагает, что $cmd
на самом деле является командой cd
. Я бы не рекомендовал это. Либо поместите обе команды в массив, либо ни одну из них.
Я думаю, тебе нужно сделать это так:
#!/usr/bin/env bash
# declare an array called array and define values
array=('dir1' 'dir2' 'dir3' 'dir4' 'dir5')
for i in "${array[@]}"
do
cd "$i" || exit
#MAKE STUFF
#MAKE MORE STUFF
cd ..
done
Подобный вопрос уже задавали (и отвечали) о массивах в Bash: ( https://stackoverflow.com/questions/8880603/loop-through-an-array-of-strings-in-bash ).
Чтобы создать массив строк в Bash, вам нужно объявить ключевое слово , используя параметр -a (-a для массива):
# Array: list of strings (directories)
declare -a directories=("/bin" "/etc" "/usr")
# For each element in the array
for element in "${directories[@]}"
do
cd $element
## DO STUFF
done