소소한 IT이야기/클라우드

[Linux_26] 쉘 스크립트

Klaus 2023. 2. 6. 18:42

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 문으로 바꿔줄 수 있다.

 

3분동안 기다리다가 특정 문자를 출력

- 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

- 변수를 설정하고 해제하는 명령어