일한지 3년이 다 되어가는데 아직도 회사일은 새로움의 연속이다.
지난주에는 갑자기 Shell Script로 자동화 툴을 만들라는 요청을 받아서, 개념을 잘 이해하지 못한 채로 3일을 갈아넣어서 개발을 완료했다.
사실 한 번 짜보고 싶었던거라 재미..도 조금 있었고(일정에 너무 쪼여서 힘들긴했다) 알아두면 유용하게 쓰이는 내용이 많은 것 같아서
블로그에 정리해두려고 한다.
시작하기
vi 등의 에디터로 파일을 생성하고, 제일 윗줄에 #!/bin/bash를 입력한다.
관습적으로 shell script라는 것을 표시하기 위해 .sh 확장자를 사용하지만, 실제로 확장자 명이나 확장자의 유무는 프로그램의 실행에 아무런 영향이 없다.
출력하기
echo는 자동으로 줄바꿈을 시켜주고,
printf는 줄바꿈이 안된다.
❯ ./Script.sh
Hello World!
Hello World!
Hello World!Hello World!
변수 선언
변수에는 자료형을 기입하지 않는다.
변수에는 모든 값이 문자열로 저장된다.
값을 사용할 때는 변수명 앞에 $를 사용한다.
값을 삽입할때는 $를 사용하지 않고, "=" 앞뒤로 공백이 없이 입력해야 한다.
선언된 변수는 기본적으로 전역변수이며, 함수 안에서 local을 붙여주면 지역변수가 된다.
❯ ./Script.sh
1
a
alphabet
a
인자 변수
shell script 작동시 인자로 넘겨주는 변수이다. 순서대로 $1, $2, $3 ...
$*는 전달된 인자 모두이며, $#으로는 전달된 인자 개수를 알 수 있다.
❯ ./Script.sh 123abc ㄱㄴㄷ
123
abc
ㄱㄴㄷ
123 abc ㄱㄴㄷ
3
if문
if문 뒤에 나오는 대괄호 사이에 공백을 넣어주어야 한다.
조건문 안에서 값을 비교하기위해 사용할 수 있는 함수는 꽤나 다양하다.
정수 비교시 eq(equal), ne(not equal), gt(greater than), ge(greater or equal), lt(less than), le(less or equal)
<, >, ==와 같은 부호도 사용 가능한데, [ ]대신 (( ))를 사용해야 한다.
❯ ./Script.sh
변수의 값이 같습니다.
❯ ./Script.sh
10 is equal to 10
for문
(( ))를 사용해서 초기값; 조건값; 증가값;으로 for문을 사용하는 것이 가장 익숙한 것 같다.
❯ ./Script.sh
1
2
3
4
while문
우선 if문, for문과 마찬가지로 대괄호를 사용하는 것이 일반적이나, (( ))를 사용하여 부등호를 사용할수도 있다.
그리고 while문의 경우 루프를 탈출하기 위해 index의 값을 1씩 증가시키려고 했는데,
index=$index+1이나 index=$(index+1)은 의도한 동작을 하지 않고
index=$((index+1))을 해야만 의도한 동작을 할 수 있었다.
❯ ./Script.sh
0
1
2
3
4
함수
function을 생략 가능하고, 인자는 띄어쓰기로 구분해서 전달하고, 함수 내에서는 인자를 $1 $2 ... 로 사용한다.
주의할 점은 호출부가 함수가 정의된 곳보다 반드시 뒤에 있어야 한다는 점이다.
❯ ./Script2.sh
Hello World
Hello World
예약 변수
말 그대로 그 쓰임이 예약되어있는 변수를 뜻한다. 요론 블로그에 잘 정리되어 있으니 따로 정리는 안하고..
궁금했던 PS3만 써봐야지.
https://blog.gaerae.com/2015/01/bash-hello-world.html
Bash 입문자를 위한 핵심 요약 정리 (Shell Script)
blog.gaerae.com
구글링 하면 찾을 수 있는 예제이다. select 명령어를 통해 사용자에게 선택 가능한 메뉴를 보여주고 입력을 받을 수 있는데,
❯ ./Script2.sh
1) mon
2) tue
3) wed
4) exit
#? 1
Monday
#? 2
Tuesday
#?
PS3을 사용하지 않는 경우 위와같이 #? 뒤에 사용자가 입력을 하게 된다.
PS3을 사용하는 경우에는 아래와같이 사용자에게 설명을 제공할 수 있다.
❯ ./Script2.sh
1) mon
2) tue
3) wed
4) exit
Please Select one(1-3) : 1
Monday
Please Select one(1-3) : 2
Tuesday
Please Select one(1-3) :
배열
배열 변수를 사용할때는 반드시 중괄호를 사용해야 하며, 1차원 배열만 지원한다.
❯ ./Script.sh
array: 0 1 2 3 4
array_new: 0 1 2 3 4 5
array 일부 출력: 0 3
array 전체 출력: 0 1 2 3 4
array 전체 개수 출력: 5
array 전체 출력: 0 1 2 3
array 전체 출력:
선택문
❯ ./Script2.sh
Hello! Select the option : [1] [2] [3]
1
[1] haha
'개발 > LINUX' 카테고리의 다른 글
mac 터미널에서 폴더트리 구조 확인 (0) | 2025.03.09 |
---|---|
Linux / Shell Script 팁 (0) | 2022.01.21 |
Linux / Shell Script 문자열 처리 명령어와 예제 (0) | 2022.01.21 |