명령줄 매개변수를 쉘 스크립트에 전달하는 방법은 무엇입니까?

명령줄 매개변수를 쉘 스크립트에 전달하는 방법은 무엇입니까?

쉘 스크립트는 마치 명령 프롬프트에서 실행된 것처럼 명령을 실행한다는 것을 알고 있습니다. 함수처럼 쉘 스크립트를 실행할 수 있기를 원합니다. 즉, 스크립트에 입력 값이나 문자열을 넣는 것입니다. 어떻게 해야 하나요?

답변1

쉘 명령과 명령에 대한 모든 인수는 다음과 같이 나타납니다.번호가 매겨진쉘 변수: 또는 기타 와 $0같이 명령 자체가 포함된 문자열 값입니다 . 모든 매개변수 는 , 등 으로 표시됩니다 . 인수의 개수는 쉘 변수에 있습니다 .script./script/home/user/bin/script"$1""$2""$3""$#"

이 문제를 처리하는 일반적인 방법은 쉘 명령 getopts과 C 라이브러리 함수 와 shift매우 유사합니다. to, to 등의 값을 이동합니다 . 코드는 결국 a... 값을 보고 무엇을 할지 결정한 다음 a를 수행하여 다음 인수로 이동합니다. 아마도 확인이 필요할 것입니다.getoptsgetopt()shift$2$1$3$2$#"$1"caseesacshift$1$1$#

답변2

매개변수 번호 - 를 사용하여 $n전달된 매개변수에 액세스 할 수 있습니다. 다른 명령과 마찬가지로 매개변수를 전달할 수 있습니다.n1, 2, 3, ...

$ cat myscript
#!/bin/bash
echo "First arg: $1"
echo "Second arg: $2"
$ ./myscript hello world
First arg: hello
Second arg: world

답변3

Bash 스크립트에서는 개인적으로 다음 스크립트를 사용하여 매개변수를 설정하는 것을 좋아합니다.

#!/bin/bash

helpFunction()
{
   echo ""
   echo "Usage: $0 -a parameterA -b parameterB -c parameterC"
   echo -e "\t-a Description of what is parameterA"
   echo -e "\t-b Description of what is parameterB"
   echo -e "\t-c Description of what is parameterC"
   exit 1 # Exit script after printing help
}

while getopts "a:b:c:" opt
do
   case "$opt" in
      a ) parameterA="$OPTARG" ;;
      b ) parameterB="$OPTARG" ;;
      c ) parameterC="$OPTARG" ;;
      ? ) helpFunction ;; # Print helpFunction in case parameter is non-existent
   esac
done

# Print helpFunction in case parameters are empty
if [ -z "$parameterA" ] || [ -z "$parameterB" ] || [ -z "$parameterC" ]
then
   echo "Some or all of the parameters are empty";
   helpFunction
fi

# Begin script in case all parameters are correct
echo "$parameterA"
echo "$parameterB"
echo "$parameterC"

이 구조에서는 각 매개변수에 대한 핵심 문자를 정의하므로 매개변수의 순서에 의존하지 않습니다. 또한 매개변수가 잘못 정의될 때마다 도우미 함수가 인쇄됩니다. 처리해야 할 다양한 매개변수를 가진 스크립트가 많을 때 매우 유용합니다. 작동 방식은 다음과 같습니다.

$ bash myscript -a "String A" -b "String B" -c "String C"
String A
String B
String C

$ bash myscript -a "String A" -c "String C" -b "String B"
String A
String B
String C

$ bash myscript -a "String A" -c "String C" -f "Non-existent parameter"
myscript: illegal option -- f

Usage: myscript -a parameterA -b parameterB -c parameterC
    -a Description of what is parameterA
    -b Description of what is parameterB
    -c Description of what is parameterC

$ bash myscript -a "String A" -c "String C"
Some or all of the parameters are empty

Usage: myscript -a parameterA -b parameterB -c parameterC
    -a Description of what is parameterA
    -b Description of what is parameterB
    -c Description of what is parameterC

답변4

$/shellscriptname.sh argument1 argument2 argument3 

또한 한 쉘 스크립트의 출력을 다른 쉘 스크립트에 매개변수로 전달할 수도 있습니다.

$/shellscriptname.sh "$(secondshellscriptname.sh)"

쉘 스크립트에서는 $1첫 번째 매개변수, $2두 번째 매개변수 등과 같은 숫자를 사용하여 매개변수에 액세스할 수 있습니다.

쉘 매개변수에 대한 추가 정보

관련 정보