Здравствуйте, я пытаюсь создать папки и назвать их в соответствии с входными параметрами Что не так в этом скрипте?

root=$1
clcount=$2
clstep=$3
delay=$4
dstep=$5

echo  $root
echo  $clcount
echo  $clstep
echo  $delay
echo  $dstep

echo creating docs

for dindex in {$delay..100..$dlstep}
  do 
     for cindex in {$clcount..1..$clstep}
     do
        fname=$cindex_$dindex
        rm -rf $fname
        mkdir $cindex_$dindex        
     done
done

echo All finished 

Скрипт не будет создавать какую-либо папку ... и он каким-то образом не объединяет значения $cindex и dindex в строку.

1 ответ1

2
  1. Решайтесь, если это dstep или dlstep .
  2. Из этой ошибки Bash:

    for i in {1..$n}

    BashParser выполняет BraceExpansion перед любыми другими расширениями или заменами. Таким образом, код расширения фигурной скобки видит литерал $n , который не является числовым, и поэтому он не расширяет фигурные скобки в список чисел. Это делает почти невозможным использование расширения скобок для создания списков, размер которых известен только во время выполнения.

    Сделайте это вместо этого:

    for ((i=1; i<=n; i++)); do
    ...
    done
    

    Или используйте seq .

  3. Ваш скрипт читает $cindex_ как переменную с именем cindex_ . Вы хотите ${cindex}_ .

  4. Кавычки переменные правильно Это может быть не решающим здесь, но в целом. Например:

    mkdir "${cindex}_$dindex"
    
  5. Там нет шебанга. Это не имеет значения, если вы поставили сценарий; но если вы запустите его, там должен быть шебанг, как #!/bin/bash или #!/usr/bin/env bash . Из-за $1 , $2 и т.д. Я предполагаю, что скрипт предназначен для запуска.

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