[쉘 스크립트] 변수와 함수 기초 문법

2023. 10. 8. 03:08·쉘 스크립트

 


 

서버를 배포하거나 할 때 쉘 스크립트를 사용할 일이 자주 있더라. 그럴때마다 코드를 항상 어디서 가져와서 사용하는데.. 사실 이해를 못하고 사용한적이 대부분이었다. 뿐만 아니라 환경설정, 자동화 등에 무궁무진하게 쓰일 수 있는 쉘 스크립트이기 때문에 공부할겸 책을 구매했다! 

 

https://product.kyobobook.co.kr/detail/S000001810353

 

처음 배우는 셸 스크립트 | 장현정 - 교보문고

처음 배우는 셸 스크립트 |

product.kyobobook.co.kr

 

실행환경
- VMWare (Ubuntu 22.04.3)
- Bash Shell

 


파일 생성

쉘 스크립트 파일의 확장자는 .sh 이다.

 

또한 파일의 시작에는 아래의 코드로 해당 파일이 쉘 스크립트 파일인것을 알려줘야 한다.

 

#!/bin/bash

파일 실행

파일 실행에는 두가지 방법이 있다.

 

- sh 명령어로 실행

 

sh shellScript.sh

 

- chmod 명령어 이용

chmod 명령어를 이용하여 쉘 스크립트 파일에 실행권한 (+x) 을 주어서 실행할 수 있도록 만들 수 있다.

 

chmod +x shellScript.sh
./shellScript.sh

 

변수 사용하기

스크립트 변수는 따로 자료형이 존재하지 않는다. 따라서 무엇이든지 할당해줄 수 있다. 기본적인 변수 할당은 변수에 '=' 연산자를 통하여 할당하고, '$' 연산자를 사용하여 스크립트 내부에서 활용할 수 있다. 또한 문자열 사이에 변수를 사용하기 위해서는 ${변수} 로 사용할수도 있다.

 

#!/bin/bash

language="korean"

echo "I can Speak $language"

 

#!/bin/bash

age=22

echo "I am ${age}years old"

 

* 참고로 language = "korean" 처럼 공백이 있으면 인식하지 못하니 주의하자.

 

함수

함수는 function 함수명() {...} 와 같이 사용할 수 있다. 호출은 함수명으로 호출하며, 매개변수는 함수명 뒤에 선언해주면 된다.

 

#!/bin/bash

function print() {
	echo $1
}
print "hello world"
print 10

 

지역 변수

일반 프로그래밍에서 사용하는 지역변수가 쉘 스크립트에도 존재한다. local 키워드를 사용하여 선언할 수 있으며, 특정 함수나 area안에서만 활용이 가능하다. (함수말고 다른 경우가 있는지는 잘 모르겠다.)

 

#!/bin/bash

function print() {
	local value="previous"
    echo $value
	echo $1
}
print "now"

 

 

위치 매개변수

위치 매개변수는 스크립트 수행시에 넘어오는 파라미터를 의미한다. 파라미터는 함수로도 넘길 수 있지만 스크립트 자체에 넘겨서 사용할수도 있다. 아래는 정리해둔 표이다.

 

매개변수 설명
$0 실행된 스크립트 이름
$1 파라미터 순서에 맞게 들어온 데이터, 10번째부터는 ${10} 처럼 {}으로 감싸줘야 한다.
$* 전체 인자 값
$@ 전체 인자 값 ($* 와 동일하나, 쌍 따옴표로 감싸면 다른 결과가 나온다.)
$# 인자의 총 개수

 

#!/bin/bash

echo "This shell script name is $0"
echo "First parameter : $1"
echo "Second parameter : $2"
echo "all parameter : $*"
echo "all parameter : $@"
echo "num of parameter : $#"

 

c언어 main에 넘겨주듯이 스크립트 파일 자체에도 매개변수를 바로 넘길 수 있다.

 

일반적으로 $* 와 $@ 명령어는 같지만, for문을 사용할 시 "$*" 와 "$@" 처럼 큰 따옴표로 감쌌을 경우 동작방식이 달라진다.

 

#!/bin/bash

for val in $*  #$@ 로 사용해도 결과 같음
do
  echo "value : $val"
done

 

 

for문과 $* 또는 $@ 을 사용했을 경우에는 위에서 볼 수 있듯이 스페이스바를 기준으로 파라미터를 인식하고 구분한다. 

 

이제 "$*" 을 사용했을 때와 "$@" 를 사용했을 때 결과를 보자.

 

#!/bin/bash

for val in "$*"
do
  echo "value : $val"
done

 

 

#!/bin/bash

for val in "$@" 
do
  echo "value : $val"
done

 

 

우선 "$*" 는 들어오는 파라미터를 모두 한줄의 문자열로 인식한다.

 

그러나 "$@" 는 기본적으로 스페이스바로 구분하고, 따옴표를 기준으로 또 구분한다. 한마디로 스페이스바를 포함하는 매개변수를 사용할 때 활용할 수 있겠다.

 

특수 매개변수

매개변수 설명
$$ 현재 실행중인 명령어 또는 스크립트의 PID
$? 최근에 실행된 명령어, 함수, 스크립트의 종료 상태
$! 최근에 실행한 백그라운드 명령의 PID
$- 현재 옵션 플래그

 

이 부분은 나중에 참고할려고 우선 작성해뒀다. $? 를 활용해서 이전의 상태값에 따라 분기를 나눌수도 있고, 필요에 의해 사용할 수 있는 매개변수들이다.

 

 

# 위 내용은 "처음배우는 쉘 스크립트" 를 공부하고 정리한 내용입니다.

'쉘 스크립트' 카테고리의 다른 글

[쉘 스크립트] for / while 문  (0) 2023.10.09
[쉘 스크립트] if문 / switch-case문  (0) 2023.10.09
[쉘 스크립트] Syntax error: "(" unexpected 에러  (0) 2023.10.08
'쉘 스크립트' 카테고리의 다른 글
  • [쉘 스크립트] for / while 문
  • [쉘 스크립트] if문 / switch-case문
  • [쉘 스크립트] Syntax error: "(" unexpected 에러
whiporithm
whiporithm
https://github.com/whipbaek
  • whiporithm
    whiporithm
    whiporithm
  • 전체
    오늘
    어제
    • 분류 전체보기 (176) N
      • 개발 (17) N
      • LeetCode (3)
      • 백준 (79)
      • 프로그래머스 (64)
      • 회고 (6)
      • 쉘 스크립트 (4)
      • 자바 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바알고리즘
    자바코테
    파이썬코테
    알고리즘
    파이썬
    파이썬코딩테스트
    파이썬알고리즘
    코딩테스트
    쉘
    Java
    개발
    프로그래머스
    nestjs 배포
    코테
    카카오
    자바
    백준
    카카오코딩테스트
    쉘스크립트
    카카오코테
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
whiporithm
[쉘 스크립트] 변수와 함수 기초 문법
상단으로

티스토리툴바