사용자가 입력한 이름과 번호로 폴더를 만드는 방법

사용자가 입력한 이름과 번호로 폴더를 만드는 방법

사용자에게는 2가지 변수, 즉 폴더 이름과 생성하려는 폴더 수를 묻는 메시지가 표시됩니다. 따라서 사용자가 sea와 3을 입력하면 출력은 sea, sea2, sea3이 되어야 합니다.

read -p "Enter the name of the folder: " NAMEFOLDER
read -p "How many copies of this folder do you want?: " NUMFOLDER

i=0

until [ $i -gt $NUMFOLDER ]

do
mkdir $(($NAMEFOLDER))
((i=i+1))
done

그러다가이 문제가 발생했습니다.

"mkdir: cannot create directory ‘0’: File exists"

나는이 문제에 갇혀 있습니다.

답변1

첫째, 스크립트가 실행되는 동안 입력을 읽지 않도록 하십시오. 이는 오타가 불가피하고 수정하기 어렵기 때문에 사용자가 사용하기 어렵고 작업을 쉽게 반복하고 자동화할 수 없다는 의미이기도 합니다. 대신 이름과 번호를 명령줄 인수로 전달하세요.

둘째, 로컬 셸 변수 이름에 대문자를 사용하는 것은 잘못된 코딩 스타일입니다. 관례에 따라 전역 환경 변수는 대문자이므로 예기치 않은 이름 지정 충돌과 디버그하기 어려운 문제가 발생할 수 있기 때문입니다.

이제 실제 문제는 $((foo))" foo수학 표현식으로 처리하고 그 결과를 반환"한다는 의미를 사용하고 있다는 것입니다. 예를 들어:

$ echo $((4 + 3 ))
7

물론 동일한 이름을 가진 여러 파일이나 디렉터리를 만들 수 없기 때문에 전체 스크립트도 의미가 없습니다. 카운터를 추가하고 싶으신가요?

어쩌면 다음과 같은 것일 수도 있습니다.

#!/bin/bash

folderName="$1"
folderNumber="$2"

for((i=1; i<=$folderNumber; i++)); do
  mkdir -p "$folderName"_$i
done

다음과 같이 실행합니다.

foo.sh bar 4

결과는 다음과 같습니다.

$ ls
bar_1  bar_2  bar_3  bar_4

접미사 없이 첫 번째 디렉토리를 생성하려면 다음을 수행하십시오.

#!/bin/bash

folderName="$1"
folderNumber="$2"

mkdir -p "$folderName"
for((i=2; i<=$folderNumber; i++)); do
  mkdir -p "$folderName"_$i
done

결과 :

$ foo.sh bar 4
$ ls
bar  bar_2  bar_3  bar_4

관련 정보