1. 쉘 스크립트의 구문
- 쉘 스크립트는 쉘 명령어들을 묶어서 하나의 파일로 만들어서 실행
- 쉘 스크립트도 일반 고급 프로그래밍 언어처럼 조건문, 반복문 등을 표현할 수 있어서 가볍고 강력하고 풍부 한 프로그램을 작성 가능
- 웰 스크립트는 메모장 등 아무 문서 편집기에서 작성해도 되고 별도의 컴파일 과정을 거치지 않고 즉시 사용
- 주석(#)으로 시작하면 되고, 'bash(OR sh OR . )스크립트_파일_명'해서 현재 디렉터리에 있는 쉘 스크립트 파일을 실행
[+] 조건문
- 조건에 따라서 실행되는 문을 작성할 때 사용된다.
- IF (~ ELSE)문
- 주어진 조건을 비교해서 결과가 참이나 거짓이냐에 따라서 실행할 명령어를 입력
**조건 연산자
-d directory, -e file, -f general file, -s size not 0, -W writable, executable file, -z!
**비교 연산자
A -eq B, A -ne B, A -gt B, A -It B, A -ge B, A -le B, !string
[+] 조건문 사용
[+] if문 사용
> greater_int
- a와 b 와 비교해서 큰값을 찾는 구문
[+] if,elif,else 조건문
- 파일경로를 입력하고 그 값이 있을 경우 파일의 내용을 보여줘라(cat)
- 만약 디렉터리라면 디렉터리라면 (ls)하여라
- 둘 중 아무것도 아니라면 해당 문구를 보여줘라.
#!/bin/bash
echo "Enter a valid file or a directory path"
read path
echo "Your entered path is $path" if [ -f $path ]; then
echo "$path is not a direcotry, but a file and its content is:
cat $path
elif [ -d $path ]; then
echo "$path is not a file, but a direcotry and its content is: "
ls $path
else
echo "$path is neither a valid file nor a directory"
fi
> if-else.sh
-이중 if 문 작성
변수a,b,c를 입력받아 만일(if) a가 제일 크다면 if 아니면 c를(c) 출력하라
만약,
-CASE 문
> 작성된 조건 중 해당 조건에 맞는
- if문과 case 동시에 사용
[+] 반복문(for)
- 반복적인 작업을 쉽게 처리할 수 있도록하는 구문
> for문을 사용하여 연산
> 1~10까지의 합 계산
[+] while문 / break 문
- 조건이 참인경우 실행문이 실행
- unitl 문 == APT 공격
while 문과 반대로 do ~ done 명령문이 실행되다가 until 조건에 맞는 순 간 실행을 끝낸다.
일단 한 번은 실행한 뒤 조건을 판단하기 때문에 적어도 한 번은 실행되는 특징
대부분 While 문은 until 문으로 바꿔줄 수 있다.
- break, continue, exit, 그리고 return 지시문
> 이들 지시어는 FOR, WHILE, UNTIL 반복문에서 흐름을 돌리거나 무한 루핑(looping)을 막는데 사용
break.sh
- 리턴
- select 문
> 이 구문은 주로 메뉴를 생성할 때 사용되는 특수한 구문
> 디렉터리와 파일 구분을 할 수 있다.
> select문을 사용하여 메뉴판도 만들 수 있다.
2. 기타 쉘 명령어들
[+] XARGS
- 표준입력으로 명령을 입력받아 작업을 수행한 뒤 표준 출력으로 결과를 보여준다.
[+] 스크립트로 만들어 사용하기.
- max_size.sh파일을 들어 입력된 경로 내에서 du -h a명령어로 디스크 사용량을 확인할 수 있다.
- 실행하였을 때(./tar_create.sh) *.sh로 끝나는 파일들을 찾아서 스크립트.tar로 묶는다.
[+] 사용자 정의 함수
-함수는 어느 계산을 수행시키는 일단의 코드 블록
- 쉘에 들어있는 내장 함수와 사용자가 임의로 작성한 사용자 정의 함수가 존재
- 변수 함수와 같은 선언할 필요없이 바로 사용 가능하다.
형식 :
(function) 함수
[+] 합을 구하는 스크립트 작성
[+]외부프로그램(dialog)와 연동되는 함수
- 다운로드 및 파일 생성(nano delete_flle.sh)
- 해당 함수는 파일을 삭제하고 저장한다.
- 파일과 연동된 외부 프로그램을 호출한다.
- 리턴(return)함수 사용하기
- 함수에 인자를 주어서 실행
> 대소문자를 치황할 수 있도록 작성
[+] 쉘 라이브러리(Shell Librar)
- 다양한 함수를 모아서 만든 파일 (단독X)
- 어느 응용프로그램에서도 별도의 변형없이 바로 불러와서 사용할 수 있는 파일
- 솔루션을 개발할 때 자주사용되는 함수를 모아놓아서 라이브러리로 만들어 놓은다.
[+] eval
- 명령어를 변수로 처리
#!/bin/sh
if [ ! -z $1 ]; then
proc_info="ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu |grep $1"
else
proc_info="ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu"
fi
eval $proc_info
#!/bin/sh
if [ ! -z $1 ]; then # -z는 file size가 0 인지
proc_info="ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu |grep $1"
else
proc_info="ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu" # 일반 실행
fi
eval $proc_info
-입력했던 변수(pipe)를 가져온다.
[+] exoirt
- export는 A 프로세스 안에 있는 변수를 B 프로세스로 전해주는 명령어
- 하나의 export 변수를 차일드 변수로 놔두고 여러 부모 프로세스들이 이 차일드 변수를 불러서 사용할 수 있다.
- 해킹에서도 종종 사용하는 기법인데 일차로 타겟머신에 들어가서 export 변수가 들어있는 간단한 백도어 파일을 넣어두고,
나중에 침투머신에서 Metasploit 등으로 타겟머신과 연결한 뒤 해당 변수를 불러내서 침투작업과 연계해서 작업을 수행 가능
- 백도어
exp1.sh가(타겟머신) 들어가고, exp2.sh를 실행시킬수 있다.
[+] set과 unset
- 변수를 설정하고 해제하는 명령어
'소소한 IT이야기 > 클라우드' 카테고리의 다른 글
[Linux_27] 서버구축하기 - PART 1 (feat. telnet, sftp, DNS) (3) | 2023.02.07 |
---|---|
[Linux_25] Ansible, 쉘 (0) | 2023.02.03 |
[Linux_24] 백업/복구, openVPN (2) | 2023.02.03 |