5 minute read

개요

리눅스를 만지작 거리다 보면 언젠가 반드시 필요한 날이 오는 Shell Programming. 그 기초부터 정리해 보도록 하겠습니다.

Bash 랑 Shell 이랑 같은 거에요?

결론부터 말하자면, 아닙니다! 아닌데, 혼용해서 쓰는 경우가 많습니다. 참고

Hello World

다음 코드는 단순히 문자열을 출력합니다. printf 는 C 언어의 printf 처럼 문자열 포맷팅을 쓸 수 있습니다.

echo "hello world"
printf "hello world"
printf "%s %s" hello world

주석

# 으로 시작하면 주석입니다.

shebang(셔뱅) line

(shebang, 어감은 좋지 않지만) 파일의 맨 첫번째 줄에 #! 으로 시작하는 부분을 shebang 이라고 합니다. 해당 스크립트를 실행할 실행기의 경로를 적어주는 것이 목적인데, 셸 스크립트의 경우 #!/usr/bin/env bash 라고 적는게 보통입니다. 이 경로에 bash 해석기가 있거든요.

변수 할당과 호출

앞 뒤로 공백없이 =을 사용하면 변수 할당입니다. 공백을 넣지 않도록 주의!

#!/usr/bin/env bash
string="hello world"
echo $string

변수를 호출할 때에는 $ 표시를 변수 이름 앞에 붙입니다. (php랑 닮았다.)

예약 변수

  • HOME : 사용자의 홈 디렉토리
  • PATH : 실행 파일을 찾을 경로
  • USER : 사용자의 이름
  • PWD : 스크립트를 실행하는 현재 디렉터리. 주의! 스크립트 가 위치한 디렉터리가 아님!

매개변수

  • $0 : 실행된 스크립트 이름
  • $1 : 스크립트에 첫번째로 전달된 인자. 순서대로 $1, $2 …

특수 매개변수

  • $$ : 현재 스크립트의 PID
  • $? 최근에 실행한 명령어, 함수 등의 종료 상태가 담긴 변수

환경변수

export 키워드를 사용해서 변수를 할당하면 환경변수를 설정할 수 있습니다. 환경 변수는 다른 스크립트에서도 쓸 수 있어요.

#!/usr/bin/env bash
export my_var="hello"
echo $my_var

쌍 따옴표

쌍 따옴표로 문자를 둘러치면 “이건 문자열 이에요” 라는 뜻입니다.

echo "this is my text"

대신 $, `, \ 등의 문자열은 “” 안에서도 그 특별한 효과를 유지합니다.

Boolean

다음 예제를 읽어보고 참, 혹은 거짓을 구분하는 방법을 알아볼까요?

#!/usr/bin/env bash
my_var1="hello"
my_var2="world"
my_var3="hello"

[ $my_var1 == $my_var3 ] ;
result=$?

echo $result

처음보는게 나왔습니다. [] (bracket 이라고 불러요.) 무엇을 의미할까요? 링크

’[’, 즉 여는 중괄호는 리눅스의 /user/bin/test 를 의미합니다.

[(여는 중괄호) 부터 ](닫는 중괄호)까지를 /user/bin/test 를 사용해서 실행한 뒤, 그 결과를 예약 변수 $? 를 사용해서 가져오는 것입니다.

조건문

$(명령)

$(명령)은 마치 함수를 호출하는 것 처럼 작동합니다. 괄호 안의 명령을 실행하고, 결과값으로 $()의 자리를 대신하게 됩니다. 예를 들어

echo "today is $(date)"

를 하면

today is ... Thu Feb 28 23:47:07 KST 2019

이런 결과가 나옵니다. 스택 오버플로

더 읽어보기

잘 정리되어 있는 링크

``

Comments