사용자 입력에 따른 스크립팅 디렉터리 및 하위 디렉터리 생성

사용자 입력에 따른 스크립팅 디렉터리 및 하위 디렉터리 생성

안녕하세요. 여기는 멍청한 취미생활자이므로 질문이 너무 단순하지는 않기를 바랍니다.

사용자 입력만 사용하여 미디어의 전체 파일 구조를 생성할 수 있는 스크립트를 작성하려고 합니다. 'mkdir Season{1..$user_input4}이 있는 라인 20을 제외하고는 모든 것이 작동합니다. 사용자 input_4를 가져와서 1+만큼 많은 디렉터리를 만들고 싶지만 대신 Season{1..(사용자 입력 인쇄)}라는 하위 디렉터리를 만들기 때문에 잘못된 관점에서 볼 수 있다고 생각합니다.

#!/bin/bash
file_created="Directory Created"
directory_number=0
echo "How many directories should be created?"
read user_input
while [ $directory_number -ne $user_input ]
do 
    echo "Enter Directory Name"
    read user_input2 
        mkdir $user_input2
    directory_number=$((directory_number + 1))
echo "Do you want to create Seasons? Y/N"
    read user_input3
    if [ $user_input3 == "Y" ]
    then
        echo "Enter number of seasons"
            read user_input4
        cd $user_input2/
        mkdir Season{1..$user_input4}
        cd ..
    else
    :
    fi
done

누구든지 아이디어가 있다면 크게 감사하겠습니다. 감사해요!

답변1

다음과 같은 이유로 이 방법은 작동하지 않습니다.

확장 순서는 다음과 같습니다.버팀대 확장; 물결표 확장, 매개변수 및변수 확장, (…).
[man bash, 강조 표시 추가]

중괄호 확장은 변수가 확장되기 전에 발생하며 볼 수만 있습니다 {1..$user_input4}. 이는 물론 유효하지 않습니다.

또 다른 가능한 문제: 만약 $user_input4매우 큰 일이 일어나서 당신이매우 긴초과할 수 있는 디렉터리 이름 목록껍질의 ARG_MAX한계, 이로 인해 명령이 실패하게 됩니다. seq숫자 시퀀스를 생성하고, printf0으로 구분된 인수 목록을 생성하고, 이 문제를 해결하기 위해 필요한 만큼 자주 xargs호출하는 데 사용할 수 있습니다 . mkdir물론 더 적은 수의 인수와 함께 사용하는 것이 절약되므로 알 수 없는 숫자와 불쾌한 악의적인 사용자를 모두 처리하는 경우 이 방법이 좋습니다.

printf 'Season%s\0' $(seq 1 $user_input4) | xargs -0 mkdir

숫자 시퀀스가 ​​+ 1로 끝나도록 하려면 $user_input4변수를 산술 표현식으로 바꾸십시오 $((user_input4 + 1)). 예:

printf 'Season%s\0' $(seq 1 $((user_input4 + 1))) | xargs -0 mkdir

답변2

내가 아는 한, mkdir은 적어도 사용하려는 형식이 아닌 다양한 디렉터리를 허용하지 않습니다. 거의 배열처럼 계절을 생성하고 있습니다. 그러나 mkdir 명령을 사용하여 둘 이상의 디렉터리를 생성하려면 공백을 두고 한 번에 하나씩 전달해야 합니다.

user_input4에서 숫자 값을 허용하므로 while 루프를 사용하여 user_input4 값에서 0에 도달할 때까지 카운트다운을 시도할 수 있습니다.

while [ $user_input4 -gt 0 ]
do
  mkdir Season${user_input4}
  let user_input4=${user_input4}-1
done

user_input4가 0이면 루프가 자연스럽게 중지됩니다. 또는 숫자보다 하나 더 필요한 경우 -ge(크거나 같음)를 사용하세요. 이 방법의 유일한 문제점은 디렉토리를 역순으로 생성한다는 것입니다. 따라서 user_input4가 "3"이면 순서는 다음과 같습니다.

mkdir Season3
mkdir Season2
mkdir Season1

관련 정보