Я хотел бы записать сценарий удара, который создаст структуру каталогов как это:
foo
| - innerdir1
| - innerfile1
Это действие должно быть повторено многократно для различных имен нечто каталога. Каждое имя нечто состоит из двух частей. Таким образом, я предполагаю, что сначала должен установить переменные среды:
$BAR=something
$BAZ=anotherthing
И затем я должен использовать их в сценарии, который произвел бы упомянутую структуру с именем нечто как $BAR.$BAZ, т.е. something.anotherthing. Как я пишу такой сценарий?
for BAR in abc def
do
for BAZ in ghi jkl mno
do
mkdir -p "$BAR.$BAZ/innerdir1"
touch "$BAR.$BAZ/innerfile1"
done
done
создаст:
abc.ghi
| - innerdir1
| - innerfile1
abc.jkl
| - innerdir1
| - innerfile1
abc.mno
| - innerdir1
| - innerfile1
def.ghi
| - innerdir1
| - innerfile1
def.jkl
| - innerdir1
| - innerfile1
def.mno
| - innerdir1
| - innerfile1
Вместо переменных среды передайте свои имена как аргументы и запишите сценарий для использования этих аргументов - который сделал бы более гибкий инструмент.
Поиск'getopts
'на уровне этой страницы руководства удара и других мест.
Сценарий:
#!/bin/bash
if [ -z "$BAR" -o -z "$BAZ" ]; then
echo "This script needs environment variables $BAR and $BAZ to be set."
exit 1
fi
dir=$BAR.$BAZ
mkdir $dir
mkdir $dir/innerdir1
touch $dir/innerfile1
Вызовите как:
BAR=bar BAZ=baz ./script.sh
Это создаст: bar.baz/innerdir1
и bar.baz/innerfile1
.
Необходимо взглянуть на
http://tldp.org/LDP/abs/html/arrays.html
Простой запуск был бы:
#!/bin/bash
# define foo array
FOOLIST=()
# can be repeated
# create foonames
BAR="something"
BAZ="anotherthing"
# add to foolist
FOOLIST+=("${BAR}.${BAZ}")
BAR="somethingnew"
FOOLIST+=("2${BAR}.${BAZ}")
BAR="somethingnewer"
FOOLIST+=("3${BAR}.${BAZ}")
# create folders from list
for folder in ${FOOLIST[@]}
do
mkdir $folder
mkdir $folder/innerdir1
mkdir $folder/innerfile1
done