🏷️1. 함수 매개변수

  • 함수에 전달된 인자값을 담고있는 변수다.
  • $1, $2, $3, ... 순으로 전달된 인자를 담고 있다.
  • 다음은 함수 파라미터를 참조하는 예시 코드다.
#!/bin/bash

function print() {

	echo $1
    echo $2
    
}

print "Hello World" "2022-07-09"

🏷️2. 위치 매개변수

  • 스크립트를 실행할 때, 사용한 실행 인자(argument)를 담고있는 매개변수다.

  • 위치 매개변수의 종류는 다음과 같다.

    매개변수설명
    $0실행한 스크립트 이름
    $1 ~실행인자가 순서대로 담겨진다.
    $*전체 실행인자 값
    $@$*와 차이가 없으나, 앞뒤로 " "(큰 따옴표)를 사용하면 차이가 발생한다.
    $#매개변수의 총 개수
    • 10번째 파라미터부터는 중괄호를 감싸서 ${10}로 표기해야 한다.
    • #은 통상적으로 많은 곳에서 number를 의미한다.
  • 다음은 위치 매개변수를 사용하는 예시 코드다.

#!/bin/bash

for var in $*
do
	echo $var
done

echo "Shell Script name is $0"
echo "Count is $#"
echo "Second argument is $2"
  • 🖇️cf) shell script의 for문은 타 프로그래밍 언어의 foreach와 유사하다.

📌"$*""$@"

  • "$*""$@"는 차이가 있다.
  • 이는 for문에서 잘 드러난다.
  • 실행인자 중에 " "(큰 따옴표)로 둘러쌓인 문자열이 있다고 가정해보자.
    • 🔍ex) sh test.sh aaa bbb "ccc ddd" eee
      • 이 예제에서는 ccc ddd다.
  • 일반적인 $*$@는 스페이스를 기준으로 문자열을 각 파라미터로 나누어 인식한다.
  • 그러나 "$*"는 문자열 전체를 하나의 파라미터로 인식한다.
  • 그와 반대로 "$@"" "(큰 따옴표)로 둘러쌓인 문자열을 하나의 파라미터로 인식한다.
  • 다음으로 실제 실습을 통해 차이를 알아보자.

$*$@의 출력값

#!/bin/bash

for var in $*
do
	echo $var
done
#!/bin/bash

for var in $@
do
	echo $var
done
  • 두 셸 스크립트를 sh test.sh aaa bbb "ccc ddd" eee명령으로 실행시킨 결과는 다음으로 둘이 같다.
aaa
bbb
ccc
ddd
eee

"$*"

#!/bin/bash

for var in "$*"
do
	echo $var
done
  • sh test.sh aaa bbb "ccc ddd" eee명령으로 실행시킨 결과는 다음과 같이 하나의 파라미터로 인식한다.
aaa bbb ccc ddd eee

"$@"

#!/bin/bash

for var in "$@"
do
	echo $var
done
  • sh test.sh aaa bbb "ccc ddd" eee명령으로 실행시킨 결과는 다음과 같이 ccc ddd를 하나의 파라미터로 인식하는 것을 알 수 있다.
aaa
bbb
ccc ddd
eee

📌shift

  • 위치 매개변수를 사용할 때, 함께 자주 사용되는 명령어 중에 shift가 있다.
  • shift명령어를 사용하면 매개변수의 값들이 앞으로 하나씩 당겨진다.
  • 즉, $2매개변수에 들어있던 실행인자가 $1매개변수로 옮겨지고, $3매개변수에 들어있던 실행인자가 $2매개변수로 옮겨지는 식이다.
  • while문과 연계해서 자주 사용된다.
  • 다음은 shift명령어를 사용하는 예시 코드다.
#!/bin/sh

echo "Second Argument is $2"
shift
echo "Now, Second Arguement is $1"

🏷️3. 특수 매개변수

  • 현재 실행중인 명령어의 PID나 바로 전에 실행했던 명령어, 함수 또는 스크립트의 실행이 정상적으로 이루어졌는지를 확인할 수 있는 특별한 변수들이다.

  • 특수 매개변수의 종류는 다음과 같다.

    매개변수설명
    $$현재 명령어 또는 스크립트의 PID
    $?최근에 실행된 명령어, 함수, 스크립트의 종료 상태
    $!최근에 실행한 백그라운드 명령의 PID
    $-현재 옵션 Flag
    • 현재 셸에서 echo $$를 해보면, 배시 셸의 PID가 출력된다.
    • test.txt가 현재 디렉터리에 있을 때, cat test.txt를 수행하고 echo $?를 해보자.
      • 0이 출력된다.
      • 이는 cat 명령어가 정상적으로 수행되었음을 나타낸다.
      • 🖇️cf) cat의 main함수가 부모 프로세스인 bash shell에게 0을 return한 것이다.
    • 그러나 test.txt를 현재 디렉터리에서 삭제하고, cat test.txt를 수행한 후 echo $?를 해보자.
      • 0이 출력되지 않을 텐데, 이는 cat이 정상적으로 수행되지 않았음을 의미한다.
profile
2Co 4:7

0개의 댓글

Powered by GraphCDN, the GraphQL CDN