다음과 같이 쉘 스크립트에 대한 명령줄 인수로 변수를 선언하고 싶습니다.
./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 dash
bash의 내장 help
명령도 유용한 정보를 제공합니다 getopts
.help getopts
--file
GNU 스타일의 긴 옵션(예 : --domain
)과 짧은 옵션 -f
및 을 사용하려면 패키지 에 있는 프로그램을 -d
사용할 수 있습니다 . 내장에는 "s"가 없지만 "s"가 없습니다 .getopt
util-linux
getopt
getopts
getopt
나는 --long 옵션을 좋아하기 때문에 보통 util-linux를 사용합니다 ....그러나 getopts
이것은 표준이며 모든 posix 호환 쉘에 내장되어 있고 bash, dash, ksh 등