생성된 디렉토리를 표시하는 대신 사용자 입력을 기반으로 디렉토리 및 하위 디렉토리를 생성하시겠습니까?

생성된 디렉토리를 표시하는 대신 사용자 입력을 기반으로 디렉토리 및 하위 디렉토리를 생성하시겠습니까?

나는 다음 스크립트를 작성했습니다.

예, 이 코드가 작동하지 않는다는 것을 알고 있습니다. 하지만 내 의견을 밝힐 수는 있을 것입니다.

echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE"
mkdir -p "$BASE/$BASE1"
mkdir -p "$BASE/$BASE2"
mkdir -p "$BASE/$BASE3"
mkdir -p "$BASE/$BASE4"
mkdir -p "$BASE/$BASE5"
ls -d */

글쎄요, 온라인 조사를 하다가 글로브를 사용해야 할 것 같다고 생각했는데 교수님이 실제로 글로브에 대해 언급하지 않으셨어요. 이 스크립트의 요구 사항은 기본 디렉터리 이름을 요청한 다음 사용자 입력을 기반으로 기본 디렉터리와 5개의 하위 디렉터리를 만든 다음 생성된 디렉터리를 echo 또는 ls 명령으로 출력하는 것입니다.

답변1

$BASE를 숫자(1..5)와 분리해야 합니다. 그렇지 않으면 sh는 원하는 것을 예를 들어 변수로 해석합니다. 당신에게 부가적인 가치를 주기보다는 $BASE1.$BASE1

이는 스크립트의 수정되고 약간 향상된 버전입니다.

echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE" "$BASE/$BASE"{1..5}
ls -1d $BASE $BASE/*

bash, zsh, ksh 또는 기타 지원되는 쉘을 사용하지 않는 경우 {1..5}다음을 수행할 수 있습니다.

echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE" 
for i in 1 2 3 4 5 ; do mkdir -p "$BASE/$BASE$i" ; done
ls -1d $BASE $BASE/*

답변2

에서는 bash다음을 수행합니다.

#!/usr/bin/bash
base="$1" #Get it from the argument, prompts for input aren't very unixy
mkdir -p "$base/$base"{1..5}
ls -d */

에서는 dash사용할 수 없으므로 {1..5}다음과 같습니다.

for i in `seq 5`; do mkdir -p "$base/$base${i}"; done

관련 정보