Как объединить переменные среды и расширение скобки в строках в Bash Linux?

Я хотел бы записать сценарий удара, который создаст структуру каталогов как это:

foo
 | - innerdir1
 | - innerfile1

Это действие должно быть повторено многократно для различных имен нечто каталога. Каждое имя нечто состоит из двух частей. Таким образом, я предполагаю, что сначала должен установить переменные среды:

    $BAR=something
    $BAZ=anotherthing

И затем я должен использовать их в сценарии, который произвел бы упомянутую структуру с именем нечто как $BAR.$BAZ, т.е. something.anotherthing. Как я пишу такой сценарий?

0
задан 09.12.2010, 03:25

4 ответа

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
2
ответ дан 24.11.2019, 06:47

Вместо переменных среды передайте свои имена как аргументы и запишите сценарий для использования этих аргументов - который сделал бы более гибкий инструмент.

Поиск'getopts'на уровне этой страницы руководства удара и других мест.

0
ответ дан 24.11.2019, 06:47

Сценарий:

#!/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.

0
ответ дан 24.11.2019, 06:47

Необходимо взглянуть на

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
0
ответ дан 24.11.2019, 06:47

Теги

Похожие вопросы