Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 리눅스
- ix is lock
- Route53 Endpoint
- 도커
- VGW
- x lock s lock
- 푸시게이트웨이
- 다이렉트 커넥트
- S3 Interface Endpoint
- S3 private통신
- sessionManager
- S3 Gateway Endpoint
- bWAPP M1
- 마운트
- bWAPP install
- push-gateway
- ec2
- s3
- Route53 Resolver
- s3 sync
- DXGW
- node pod 분리
- bWAPP arm
- AWS Resolver
- Terraform
- SessionManager 터널링
- DNS Resolver
- CrossSiteScript
- BastianHost
- S3 PrivateLink
Archives
- Today
- Total
이것이 점프 투 공작소
쉘 스크립트 개요 본문
쉘 스크립트란?
쉘 명령어로 이루어진 텍스트 파일입니다. 긴 작업이나 반복적인 작업을 작성하여 효과적으로 실행 시킬 수 있습니다
쉘 스크립트 실행 명령어
1. bash script_file
- 스크립트 파일에 실행 권한을 추가할 필요 없음
- 명령 행에서 script_file 다음에 인수 추가 가능 (모든 실행 명령어에서 가능)
- 서브 쉘을 새로 생성하여 스크립트 실행합니다.
2. ./script_file (위치지정/스크립트파일)
- 스크립트 파일에 실행 권한 추가 필요
- PATH 환경변수에 설정된 디렉토리에서 스크립트 파일을 찾습니다.
- 스크립트 파일의 첫 행에서 #! 다음 /bin/bash를 지정
- 서브 쉘을 새로 생성하여 스크립트 실행합니다.
3. source script_file 또는 . script_fiel
- source는 쉘의 내장 명령이며 현재 쉘에서 스크립트 파일 실행합니다.
기초문법
- # 은 주석
- $0 (스크립트파일 이름), $1 (첫번째 인자), $2(두번째 인자) -> source명령으로 실행하는 경우는 $0은 bash가 됩니다.
- 변수=값 (=의 좌우에 공백이 있으면 안됩니다.)
- bash -x script_file -x 와 함께 실행하면 수행되는 명령을 확인 할 수 있습니다. (디버깅 모드)
- 일반적으로 모든 변수이름은 소문자로 작성합니다.
- 선언 없이 변수를 사용 할 수 있다 (기본값 빈 문자열)
- d=$(ls | wc -l) : $() 명령치환, 명령의 결과값을 변수에 할당
- a=$[5*7] : $[] 대괄호 안 값을 계산 후 대입
- a=${b}1 : ${}중활호를 사용하면 뒤에 값과 함께 변수로 할당 가능
- $a=$b : 불가능, 쉘은 하나의 변수를 하나의 명령어로 처리함으로 오류가 발생합니다.
특별한 문법
- $* : 모든 매개변수를 하나의 문자열로 바꾼다 ex )"123"
- $@ : 모든 매개변수를 개별의 문자열로 확장합니다 ex) "1" "2" "3"
- $$ : 쉘의 프로세스ID
- $# : 매개변수의 갯수
- $? : 최근 실행된 포그라운드 명령의 종료 상태값 (성공은 0)
- $! : 최근 실행된 백그라운드 명령의 ID
함수
쉘 스크립트 파일 내에 정의된 함수를 사용 할 수 있습니다.
set명령으로 함수를 확인하고, 없으면 함수가 들어있는 스크립트 파일을 source명령어로 실행하면 쉘 환경에 함수가 추가됩니다. ~./bashrc에 함수를 정의해두면 로그인 시마다 함수가 환경에 추가됩니다.
정의방법
function name{
command ..
return
}
# 또는
name() {
command ..
return
}
두가지 정의 방법이 있습니다. return의 인자가 없으면 직전 명령의 종료 상태값을 리턴합니다.
제어문
IF
if command...; then
command...
[elif command...; then
command... ] ...
[else
command...]
fi
;(세미콜론)의 경우 같은 라인에서 다른 단어 (then, elif, else, fi 등)와 구분이 필요할 때 사용합니다.
if, elif 다음에 나오는 마지막 명령의 종료 상태값으로 true,false를 구분합니다. (종료 상태값 0은 true)
if true; false; then 이면 마지막 명령어의 false값을 전달받습니다.
TEST명령
조건이 만족되면 0 아니면 1을 리턴합니다.
if [명령문]; then
echo "hello world"
fi
if test 명령문; then
echo "hello world"
fi
TEST명령 연산자 예시
연산자 | 설명 | ||
file -nt file2 | file1이 file2보다 더 빨리 생성되었으면 | ||
file -ct file2 | file이 file2보다 늦게 생성되었으면 | ||
-d file | file이 디렉토리면 | ||
-s file | file이 존재하고 0보다 크기가 크면 | ||
-x file | file이 실행가능하면 | ||
string > string2 | string이 string보다 큰가(사전순) 비교시 \> 를 사용해야합니다. |
||
string = string2 | 두 문자열이 같으면 | ||
-z string | 문자열의 길이가 0이면 | ||
$1 -eq $2 | 두 변수가 같으면 | ||
exp1 -a exp2 | 두 식이 모두 참이면 && | ||
exp1 -o exp2 | 둘중 하나가 참이면 || |
CASE
case $var in
[pattern [| pattern]...) command ... ;;] ...
esac
CASE사용 예시
case $str in
*.txt) echo $str
;;
a|A) echo "aA"
;;
*) echo "default"
exit
;;
esae
FOR
for i [in word...]; do
command...
done
# java, c의 형태의 반복문도 사용 가능합니다
for (( i=0; i<10; i++)); do
command...
done
# 예시
for i in A B C; do echo $i; done
# 예시, 중괄호 확장 A,B,C,D 출력됩니다
for i in {A..D}; do echo $i; done
word는 반복가능한 객체를 의미합니다. 가장 먼저 변수확장됩니다. 기본값은 $@
while
while command...; do
command...
done
참인동안 실행하는 명령문
until
until command...; do
command
done
거짓인동안 실행하는 명령문
'리눅스' 카테고리의 다른 글
httpd의 설정 항목들을 정리해보자 (0) | 2022.10.21 |
---|---|
리눅스와 네트워크 (1) | 2022.10.17 |
리눅스 프로세스의 상태에 대하여 알아보자 (0) | 2022.10.10 |
리눅스의 프로세스 개요 (0) | 2022.10.07 |
리눅스의 파일시스템에 대해 알아보자 (0) | 2022.10.02 |