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

foo
 | - innerdir1
 | - innerfile1

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

    $BAR=something
    $BAZ=anotherthing

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

4 ответа4

2
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
0

Сценарий:

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

Вы должны посмотреть на

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

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

Найдите « getopts » на этой странице руководства bash и в других местах.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .