쉘 스크립트(shell script)란?
쉘 스크립트는 리눅스(linux)혹은 유닉스(unix) 기반의 운영체제에서 사용되는 스크립트 언입니다. 여기서 스크립트는 명령어, 프로그래밍 구조를 사용하여 시스템 작업을 자동화 하는데 사용됩니다. 예를 들어 main.py -> val.py -> test.py 순서대로 작동시켜야할 때, 쉘 스크립트에 미리 작성한 뒤에 그 쉘 스크립트를 실행하면 명령어 한줄에 저 세 개의 파일을 모두 실행시킬 수 있습니다.
쉘 스크립트 미사용 | 쉘 스크립트 사용 |
main.py, val.py, test.py 3번 실행 | start.sh 1번 실행 |
쉘 스크립트는 반복문, 조건문, 함수 등과 같은 프로그래밍 요소들을 포함하기 때문에, 파이썬 코딩하듯이 쉽게 작성할 수 있습니다.
이제부터는 쉘 스크립트를 어떻게 정의하는지 알아보도록 하겠습니다.
쉘 스크립트 파일 만들기
쉘 스크립트파일은 .sh 확장자를 사용하고, 파일의 첫 줄에 특정 코드를 작성해야합니다.
예를 들어 start.sh라는 파일을 만들었다고 가정합시다. 이 파일의 제일 상단에는 아래와 같은 코드를 작성해주셔야합니다.
#!/bin/bash
"나 쉘스크립트 파일임"이라고 명시해준다 생각하시면 됩니다.
쉘 스크립트 문법
1. 주석
쉘 스크립트의 주석은 파이썬과 같습니다 #으로 표기해주시면 됩니다.
#나는야 주석
2. 변수
쉘 스크립트에서도 변수 선언을 해줄 수 있는데요. 따로 자료형을 선언해주지 않으셔도 됩니다.
여기서 중요한 포인트가 있습니다.
- 변수 선언시 등호를 이용하고, 변수 이름과 값 사이에 공백을 넣으면 안됩니다.
생각보다 쉘 스크립트는 공백에 예민하니 주의해주세요.
#올바른 선언방법
name="ComGongNuNa"
age=29
#틀린 선언 방법
name = "ComGongNuNa"
age = 29
위에서 변수를 선언했으니 받아와야겠죠?
변수는 $기호를 사용하여 받아옵니다.
echo $name
echo $age
여기서 echo는 python의 print와 같은 역할을 합니다.
출력 결과는 다음과 같습니다.
3. 조건문
조건문은 기존과 동일하게 if, elif, else를 이용합니다.
단, 여기서는 조금 다른 부분이 있습니다.
if, elif 뒤에는 then을 적어줘야하며, 조건문이 끝나는 부분에 fi를 적어줘야합니다.
여기서 주의사항!
앞에서도 말씀드렸듯이 쉘 스크립트는 공백에 굉장히 예민합니다. 따라서 [ $name == "ComGongNuNa" ]괄호와 인자들 사이에 공백을 반드시 넣어주셔야합니다.
올바른 경우 | 틀린 경우 |
[ $name == "ComGongNuNa" ] | [$name == "ComGongNuNa"] |
## 방법1
if [ $name == "ComGongNuNa" ]; then
echo "ComGongNuNa!!!"
elif [ $name == "ComGong" ]; then
echo "ComGong!!!"
else
echo "No!!!"
fi
## 방법2
if [ $name == "ComGongNuNa" ]
then
echo "ComGongNuNa!!!"
elif [ $name == "ComGong" ]
then
echo "ComGong!!!"
else
echo "No!!!"
fi
출력 결과는 다음과 같습니다.
4. 반복문
반복문도 for, in으로 사용가능합니다.
여기서도 조금 다른점이 있는데요.
for문을 돌기전 do 로시작을 알려야하며, 끝날 경우 done으로 명시해줘야 합니다.
##리스트 이용하기
char_list="A B C D E"
for i in $char_list
do
echo $i
done
##배열 이용하기
num_array=(1 2 3 4)
for i in "${num_array[@]}"
do
echo $i
done
##range(1,10)해보기
for i in {1..10}
do
echo $i
done
##range(10,1)해보기
for i in {10..1}
do
echo $i
done
##range(10,1,2)해보기
## 10에서 1방향으로 2칸씩 가기
for i in {10..1..2}
do
echo $i
done
- 리스트
- 리스트의 경우 공백을 기준으로 써줍니다.
- 배열
- 배열은 ()로 감싸주며, 콤마 없이 공백으로 구분합니다. 문자열, 숫자 모두 가능합니다.
- 증가, 감소
- 파이썬에서의 range는 {}으로 표현하며 ..으로 구분합니다.
- range(1,10)은 {1..10}
- range(1,10,2)는 {1..10..2}
여기서 또 다른 반복문인 while은 아래와 같이 사용합니다.
선언은 위와 동일하게 해주면됩니다.
while [ $age -gt 0 ]
do
echo $age
age=$(($age - 1))
done
여기서 새로운 연산자 두가지가 등장합니다!
- while문 내의 수치 비교
데이터 타입 | 연산자 | 설명 |
산술 비교 연산 |
A -eq B | A,B가 같을 경우 참 |
A -ne B | A, B가 같지 않을 경우 참 | |
A -gt B | A가 B보다 클 경우 참 | |
A -ge B | A가 B보다 크거나 같은 경우 참 | |
A -lt B | A가 B보다 작을 경우 참 | |
A -le B | A가 B보다 작거나 같은 경우 참 | |
A < B | A가 B보다 작을 경우 참(이중 소괄호에서만 사용 가능 (()) ) | |
A <= B | A가 B보다 작거나 같을 경우 참(이중 소괄호에서만 사용 가능 (()) ) | |
A > B | A가 B보다 클 경우 참(이중 소괄호에서만 사용 가능 (()) ) | |
A >= B | A가 B보다 크거나 같을 경우 참(이중 소괄호에서만 사용 가능 (()) ) | |
문자열 비교 연산 |
A = B | A와 B가 같을 경우 참 |
A == B | A와 B가 같을 경우 참 | |
A != B | A와 B가 같지 않을 경우 참 | |
A < B | A가 B보다 먼저오지 않을 경우 참 | |
A > B | A가 B보다 먼저 올 경우 참 | |
A -z | A가 null일 경우 또는 길이가 0이면 참 | |
A -n | A가 null이 아닐 경우 참 | |
논리 연산 |
A -a B | A and B |
A -o B | A or B |
- 사칙연산
사용법 1 | result=$(($a 연산자 $b)) |
사용법 2 | result=$(expr $a 연산자 $b) |
사용법 3 | result=`expr $a 연산자 $b` |
연산자에는 +, -, /가 공통적으로 들어가며 expr곱셈에는 \*로 적어주시고, 일반 곱셈에는 *로 사용하시면 됩니다.
5. 함수
함수도 파이썬과 굉장히 비슷한데요. 파이썬에서는 def로 선언해주지만, bash에서는 function 으로 선언해줍니다.
function test(){
echo "test"
}
함수 호출시에는 아래와 같이 사용합니다.
test
함수에 인자를 줄 경우 호출 부분에서는 따로 명시해주지 않습니다.
예를 들어 아래와 같이 출력하는 함수가 있다고 가정합시다.
function test(){
echo $1
echo $2
}
여기서 $1, $2는 각각 첫번째, 두번째 인자입니다.
아래와 같이 호출해 주면 함수의 인자가 들어가서 각각 1, 2가 출력됩니다.
test 1 2
공백 기준으로 인자를 넣어주시면 됩니다.
오늘은 쉘 스크립트의 기본 문법에 대해서 알아보았습니다!
도움이 되셨으면 좋겠네요:)
'꿀팁 > 소소한 팁' 카테고리의 다른 글
bardapi를 사용해보자 (0) | 2023.06.10 |
---|---|
ray를 사용해보자 (0) | 2023.06.08 |
ChatGPT API를 사용해보자 (0) | 2023.06.07 |
github 특정 branch clone하기 (0) | 2023.04.04 |
대용량 데이터의 유사도 검색 라이브러리 faiss 사용하기 (2) | 2023.03.14 |