쉘 스크립트는 마치 명령 프롬프트에서 실행된 것처럼 명령을 실행한다는 것을 알고 있습니다. 함수처럼 쉘 스크립트를 실행할 수 있기를 원합니다. 즉, 스크립트에 입력 값이나 문자열을 넣는 것입니다. 어떻게 해야 하나요?
답변1
쉘 명령과 명령에 대한 모든 인수는 다음과 같이 나타납니다.번호가 매겨진쉘 변수: 또는 기타 와 $0
같이 명령 자체가 포함된 문자열 값입니다 . 모든 매개변수 는 , 등 으로 표시됩니다 . 인수의 개수는 쉘 변수에 있습니다 .script
./script
/home/user/bin/script
"$1"
"$2"
"$3"
"$#"
이 문제를 처리하는 일반적인 방법은 쉘 명령 getopts
과 C 라이브러리 함수 와 shift
매우 유사합니다. to, to 등의 값을 이동합니다 . 코드는 결국 a... 값을 보고 무엇을 할지 결정한 다음 a를 수행하여 다음 인수로 이동합니다. 아마도 확인이 필요할 것입니다.getopts
getopt()
shift
$2
$1
$3
$2
$#
"$1"
case
esac
shift
$1
$1
$#
답변2
매개변수 번호 - 를 사용하여 $n
전달된 매개변수에 액세스 할 수 있습니다. 다른 명령과 마찬가지로 매개변수를 전달할 수 있습니다.n
1, 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
두 번째 매개변수 등과 같은 숫자를 사용하여 매개변수에 액세스할 수 있습니다.