티스토리 뷰
셸 스크립트
셸 스크립트란 bash나 zsh 같은 셸로 실행하는 스크립트의 총칭이다. 셸 작업을 미리 입력해놔서 자동화할 수 있다. bash로 실행하는 스크립트는 맨 첫줄에 #!/bin/bash를 적어 bash 스크립트임을 알린다.
파일실행
실행권한이 없는 파일을 실행하려고 하면 에러가 발생한다. 따라서 해당 파일에 chmod로 실행권한을 부여해야 한다. 또한, 파일을 실행하려면 그 파일이 있는 경로를 제대로 지정해주어야 한다.
./스크립트이름.sh 로 실행 가능하다.
변수선언
=를 기준으로 공백없이 입력하면 변수에 할당이 된다.
지역변수는 local을 붙이면 되고, 전역변수더라도 자식 프로세스에서는 기본적으로 사용불가하다. 변수 앞에 export를 붙여 환경변수로 설정하면 다른 프로세스에서도 사용 가능하다.
✨치환기법
구분 | 사용법 | 설명 |
변수사용 | $변수명 또는 ${변수명} | 할당된 변수를 변수명으로 사용할 때는 $변수명으로 사용하는데, 범위를 명시하기 위해 ${변수명} 으로도 사용가능하다. |
명령어 치환 | $(명령어열) | 명령어 치환을 하려면 $(명령어열) 으로 사용하면 된다. 명령어열 실행결과(표준출력)의 문자열로 치환된다. 즉, 소괄호 안의 명령어가 먼저 실행되고 그 결과로 치환된다. $(dirname $(dirname $path))) 등으로 겹쳐서 사용가능하다. |
계산결과로 치환 | $((계산식)) | 계산식의 결과값으로 치환된다. |
위치 매개 변수
명령어의 위치 매개로 0이 해당 스크립트 이름, 그 뒤로 1, 2, 3... 순서로 위치 매개 변수로 할당된다.
사용법 | 설명 |
$0 | 실행된 스크립트 이름 |
$숫자 | $1, $2 등의 순서로 가능하며, 10번째 부터는 {}로 감싼다. ${10} |
$* | 전체 인자 값 |
$@ | 전체 인자 값(쌍따옴표로변수를 감싸면 $*와 다른 결과가 나온다고함) |
$# | 매개변수의 총 개수 |
위치 매개 변수가 아닌 옵션 이름으로도 값을 참조 가능하다. 이 경우 다른 방법으로 매개변수를 받아온다.
특수 매개 변수
사용법 | 설명 |
$$ | 현재 스크립트의 PID |
$? ✨ | 직전 명령어, 함수, 스크립트의 종료상태 (0은 정상종료, 그외는 비정상종료) |
$! | 최근 실행한 백그라운드(비동기) 명령의 PID |
이외에도 예약어로 사용되는 변수들이 있지만, 너무 많아서 필요할 때 찾아서 사용하면 되겠다. 매개변수 확장 방식으로 변수의 값을 조정하여 사용할 수 있으나 이것 또한 너무 많아서 나중에 찾아서 사용하면 되겠다.
비교연산자
사용법 | 설명 | |
< | -le | 보다 작음 |
> | -gt | 보다 큼 |
<= | -le | 보다 작거나 같음 |
>= | -ge | 보다 크거나 같음 |
!= | -ne | 같지 않음 |
== | -eq | 같음 |
&& | -a | 논리 AND |
|| | -o | 논리 OR |
배열
1차원 배열만 지원한다.
# 배열설정
array=("apple" "pear" "banana")
# 배열 값 추가
array[3]="tomato"
# 배열 변수사용
${array[1]}
# 배열복사 grape 값을 추가하여 배열 저장
fruits=(${array[@]} "grape")
조건문
조건문에 들어가는 [ 또한 명령어이므로 [ 다음에 공백이 있어야 한다.
if [ 조건 ]
then
// 조건을 만족하면 실핻하는 내용
else
// 조건을 만족하지 않으면 실행하는 내용
fi // 조건문의 종료를 나타냄
case 문의 각 case는 ;; (세미콜론2개)로 구분한다.
case ~ in
값1) ~가 값1과 같을 때 실행하는 명령어열 ;;
값2) ~가 값2과 같을 때 실행하는 명령어열 ;;
값3) ~가 값3과 같을 때 실행하는 명령어열 ;;
esac // case문의 종료를 나타냄
반복문
for ~ in ~
do
// 반복문으로 수행할 일
done // 반복문의 종료를 나타냄
for ~ do ~ done 이나 while ~ do ~ done 으로 조건문을 표기한다.
함수선언 및 사용
function이라고 적지 않고 사용하면 된다. 하지만 호출코드가 반드시 함수코드보다 뒤에 있어야 한다.
# 함수선언
hello(){
echo "안녕"
echo "Hi"
echo "잘가"
}
# 함수호출
hello
정리
매번 셸 스크립트 사용 상태까지 가지 못해서 셸 스크립트를 정리해보고 싶었다. 직접 스크립트로 조작하여 사용해 본 적은 아직 없지만, 사용할 수 있을 것 같은 자신감이 생겼다! ⚡
참고자료
'Back-end > CLI' 카테고리의 다른 글
리눅스 기반 CLI 기본 개념과 명령어 (0) | 2021.02.04 |
---|
- Total
- Today
- Yesterday
- 글쓰기미션
- 코드스쿼드
- 개발공부일지
- 알고리즘
- 네트워크
- OS
- 카카오
- Transaction
- 학습로그
- JPA
- 월간회고
- 객체지향
- python
- React
- 운영체제
- 우아한테크코스
- 인증
- Spring
- TCP/IP
- javascript
- TIL
- JS
- 회고
- 모의면접준비
- 내부코드
- CS
- 마스터즈코스
- DB
- java
- 우테코수업
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |