스크립트가 작동하지 않음 - 스크립팅의 새로운 기능

스크립트가 작동하지 않음 - 스크립팅의 새로운 기능

디렉터리 이름이 포함된 매개 변수를 받아들이고 해당 매개 변수가 있는지 확인하는 스크립트를 작성하려고 합니다. 스크립트 이름은 script_practice_3.sh여야 하며 blc를 스크립트에 전달해야 합니다. 예: ./script_practice_3.sh blc

어떤 이유로 내 스크립트가 작동하지 않는데 이유를 모르겠습니다. 저는 유닉스 스크립팅에 익숙하며 이것이 정말 실망스럽습니다.

#!/bin/bash

echo "What is the parameter name that contains the script name: "
read SCRIPT

echo "What is the parameter name that contains the value blc: "
read VALUE

if [ "$?" = "0" ]
then
 echo "You must provide one parameter"
elif [ "$?" > "1" ]
then
 echo "You must provide only one parameter"
else
 test -d $SCRIPT
 if [ "$?" = "0" ]
 then
  echo "Already exists"
 else
 mkdir $VALUE
 echo "directory created"
fi

답변1

특수변수 $?종료 상태최근에 명령을 실행했습니다. 스크립트에 주어진 인수의 개수(위치 인수의 개수)는 로 주어진다 $#.

>한 값이 다른 값보다 수치적으로 큰지 여부를 비교하는 데는 사용할 수 없습니다 . 이를 수행하려면 를 사용하십시오 -gt. 이 테스트는 문자열의 정렬 순서(" 정렬 후 " ) >를 결정하는 테스트입니다 .ba"b" > "a"

]또한 테스트 중 하나가 누락되었습니다 .

또한 명령줄에서 스크립트에 단일 인수를 제공하려는 경우 왜 두 값을 대화형으로 읽으려는지 잘 모르겠습니다.

제안:

#!/bin/sh

if [ "$#" -ne 1 ]; then
   echo need exactly one argument >&2
   exit 1
elif [ -d "$1" ]; then
   printf '"%s" is already a directory\n' "$1" >&2
   exit 1
elif ! mkdir "$1"; then
   printf 'failed to create directory "%s"\n' "$1" >&2
   exit 1
fi

printf 'Successfully created directory "%s"\n' "$1"

$1첫 번째 위치 인수(스크립트에 제공된 첫 번째 인수)는 스크립트 전체에서 사용됩니다.

mkdir여기서 중간 테스트는 실제로 필요하지 않습니다. 이미 존재하는 디렉토리를 생성하려고 하면 (옵션 없이 ) 불평할 것이므로 -p이는 마지막 테스트에서 포착됩니다.

귀하의 질문에 제안된 대로 스크립트가 호출됩니다.

./script.sh "some directory name"

관련 정보