쉘 스크립트에서 명령줄 변수를 선언하는 방법은 무엇입니까?

쉘 스크립트에서 명령줄 변수를 선언하는 방법은 무엇입니까?

다음과 같이 쉘 스크립트에 대한 명령줄 인수로 변수를 선언하고 싶습니다.

./script.sh

file=/tmp/domains.txt 
domain=abcd.com**

똑같이 도와주세요.

답변1

이러한 변수를 지정하여 전달할 수 있습니다.앞으로예를 들어 명령 이름입니다.

file=/tmp/domains.txt domain=abcd.com ./script.sh

이렇게 하면 쉘 스크립트가 실행되기 전에 이러한 변수가 환경에 배치됩니다. 즉, 다른 변수처럼 쉘 스크립트에서 이러한 변수를 사용할 수 있습니다.

답변2

이와 같은 변수를 전달하는 것은 가능하지만 사용자가 스크립트의 내부 구조를 이해해야 합니다. 또한 스크립트와 완전히 관련되지 않은 다른 이유로 변수가 환경에 정의된 경우(사용자가 스크립트를 실행할 때 명령줄에서 해당 변수를 설정하는 것을 잊어버린 경우) 이상하고 설명할 수 없는 동작이 발생할 수 있습니다.

더 나은 접근 방식은 셸의 내장 옵션인 parsing 을 사용하는 것입니다 getopts.

usage() {
    # print some help text here, e.g.
    echo Usage:
    echo "      $0 [-f filename] [-d domainname]"
}

# -f and -d are the only valid options and they both
# take strings as arguments.
while getopts f:d: opt; do
  case "$opt" in
     f) file="$OPTARG" ;;
     d) domain="$OPTARG" ;;
     *) usage ; exit 1 ;;
  esac
done
shift $(expr $OPTIND - 1)

# print help message and exit if either file or domain are
# empty.
[ -z "$file" ] && usage && exit 1
[ -z "$domain" ] && usage && exit 1

자세한 내용은 셸의 매뉴얼 페이지(예 man bash: 또는 )를 참조하세요. man dashbash의 내장 help명령도 유용한 정보를 제공합니다 getopts.help getopts

--fileGNU 스타일의 긴 옵션(예 : --domain)과 짧은 옵션 -f및 을 사용하려면 패키지 에 있는 프로그램을 -d사용할 수 있습니다 . 내장에는 "s"가 없지만 "s"가 없습니다 .getoptutil-linuxgetoptgetopts

getopt나는 --long 옵션을 좋아하기 때문에 보통 util-linux를 사용합니다 ....그러나 getopts이것은 표준이며 모든 posix 호환 쉘에 내장되어 있고 bash, dash, ksh 등

관련 정보