OS/Linux

Shell Script 정리

tpcable 2021. 3. 9. 14:40

1.
*.sh 의 이름

2.
#!/bin/bash 로 시작

3.
변수 = "문자열"
echo "${변수}"

4.
실행 권한

5. 정규 표현식

  • A* A다음에 0개 이상의 문자를 매칭
  • A? A다음에 1개의 문자
  • ^A A로 시작하는 문자열
  • A$ A로 끝나는 문자열
  • A|B A 또는 B가 있음 c[A|B]f : cAf cBf
  • [a-z] a부터 z까지 알파벳 범위를 매칭
  • ' ' 모든 셸 문자 무시
  • " " $ ` \ 를 제외 무시
  • `` 셸 명령 실행
  • \ 특수문자 기능 제거

산술 비교

수식1 -eq 수식2 => 두 수식이 같으면 참
수식1 -ne 수식2 => 두 수식이 다르면 참
수식1 -gt 수식2 => 수식 1이 크면 참
수식1 -ge 수식2 => 수식 1이 크거나 같으면 참
수식1 -lt 수식2 => 수식 1이 작으면 참
수식1 -le 수식2 => 수식 1이 작거나 같으면 참
!수식 => 수식이 거짓이면 참

문자열 비교

"문자열1" = "문자열2" => 두 문자열이 같으면 참
"문자열1" != "문자열2" => 두 문자열이 같이 않으면 참
-n "문자열" => 문자열이 NULL이 아니면 참
-Z "문자열" => 문자열이 NULL이면 참

파일 관련 조건

-d File => 파일이 존재하고, 디렉터리면 참
-f File => 일반 파일이면 참
-e File => 파일이 존재하면 참
-s File => 파일의 크기가 0이 아니면 참
-u File => 파일에 set-user-id 가 설정되면 참
-g File => 파일에 set-group-id 가 설정되면 참
-r File => 파일이 읽기 가능이면 참
-w File => 파일이 쓰기 가능 상태면 참
-x File => 파일이 실행 가능 상태면 참

[ 조건문 if ]

if [ 조건1 ]
then
실행명령
elif [ 조건2 ]; then
실행명령
else
실행명령
fi

${#변수} 로 변수의 크기 확인 가능

&&
[ 조건1 -a 조건2 -a 조건3 ]
||
[ 조건1 -o 조건2 -o 조건3 ]

예시) load average 가 어느정도 이상이면 경고 메세지를 보내는 스크립트, PID 파일이 생성되어 있는지

[ 조건문 case ]

case 변수 in
패턴1)
실행명령 ;;
패턴2)
실행명령 ;;
*)
마지막 패턴 ;;
esac

[ 반복문 for ]

for 변수 in 값1 값2 값3
do
반복 문장
done


for 변수 in $(seq 1 10)과 같이 사용가능

for 변수 in $(cat 파일)과 같이 사용가능

[ 반복문 while ]

while [ 조건문 ]
do
반복 문장
done

while true 는 무한 루프
exit 0 은 정상종료
exit 1 은 오류

svr 이라는 변수를 읽음

  • 변수=$( ) 변수에 명령어의 결과를 집어넣을 때 실행시키는 문법
  • 연산식 사용 방법 echo $[ $1 + $2 ]
  • 산술 계산식 사용 변수=$(( ${변수}+1 ))


예시) 시스템 로그 디렉터리에 대한 처리, 로그 파일에 대한 검색, 텍스트 파일을 한줄 씩 읽어서 처리 등

[ 함수 ]

function 함수명 {
명령어
}
---------------------------------------
함수명 () {
명령어
}

#!/bin/bash
source 파일경로 를 통해 호출 후 함수 사용

함수명을 입력해 호출
함수 생성 후 다른 쉘스크립트에서 사용 가능

[ 배열 ]

변수=(값1 값2 값3)
변수 값 출력

  • for i in $(seq 0 10) ;do echo ${배열[${i}]} ;done
  • echo ${배열[*]}


[ 리다이렉션 ]

- 쉘 스크립트 내에서 텍스트 파일 활용
- 표준입력0, 표준출력1, 표준에러2

tee -a 를 통해 출력과 파일로 저장

메일 보내는 명령어
cat report | mail -s "제목" 메일주소

read -p "화면에 표시 문자" 변수
read -sp "화면에 표시 문자" 변수
(s 옵션 시 입력값 안보임)

[ SED / AWK ]
sed 옵션 문자열처리_스크립트 파일명

  • 텍스트 입력 스트림을 받아 출력을 제어 할 수 있는 명령
  • 라인 단위로 처리하기에 지나간 라인에 대해 처리가 불가능
  • 메모리를 적게사용

*처리과정

  1. 파일이나 입력받은 문자열을 한줄 씩 읽음
  2. 읽은 데이터를 명령대로 스트링 데이터를 처리
  3. 처리한 데이터를 표준 출력

*옵션

  • -e 입력을 처리하는 하나의 처리 명령을 의미, 여러 번 지정하여 여러 번의 처리 가능
  • -f sed로 처리할 문자열처리_스크립트를 파일로 만들어 놓고 명령 수행
  • -n 각 명령의 결과를 화면에 출력하지 않고 print 명령을 대기
  • -r 확장된 정규 표현식 사용

*문자열 처리 명령어 p d s y g

  • [텍스트라인-범위]/p => print 출력
  • 3,5d => delete 삭제
  • 's/소스/결과/' => substitute(치환) 한줄에처음 나타나는 소스패턴을 결과 패턴으로 치환
  • 시작라인,끝라인s/소스/결과/ => 지정한 범위에서 처음 나타나는 소스패턴을 결과 패턴으로 치환
  • 시작라인,끝라인y/소스패턴/결과패턴/ => transform 지정한 범위에서 소스패턴을 결과 패턴으로 바꿈( 문자수가 동일 해야함)
  • 명령어처리_스크립트/g => global 명령어처리 스크립트의 모든 소스패턴을 결과 패턴으로 변경



예시

  • echo "테스트 문장입니다." | sed 's/테스트/test/'
  • sed 's/테스트/sed test/' data.txt
  • sed '3,5s/테스트/sed test/' data.txt
  • sed '3,5d' data.txt
  • sed 's/테스트/sed test/w 새 파일' 원본파일 => w flag를 통해 sed 결과물을 저장
  • sed -e 's/테스트/test/; s/문장/문자열/' data.txt => -e 옵션과 ; 로 구분
  • sed -n 's/테스트/test/p' data.txt => n옵션 사용 시 flag p 필요, s는 치환, 검색할 때 자주 사용
  • sed -n '/^3/p' 파일명 => 검색 시 사용
  • sed -f two.sed data.txt => 파일을 바탕으로 결과값 출력


find . -type d -name "*.txt"
find . -type f -name "*.txt"
find . -name "t[x|z]t"

AWK 옵션 읽어드릴_파일명
sed 기능 + 변수/함수/연산자를 사용해 필요한 데이터를 제어할 수 있는 명령어

  • -F 필드구분자 필드를 구분하기 위한 구분자를 지정
  • -f 파일이름 awk프로그램이 읽어들일 파일 이름을 지정
  • -변수=변수값 awk프로그램에서 사용할 변수를 지정

텍스트파일이나 명령 실행결과에서 원하는 필드를 출력할 때 사용
필드란? 각각의 항목

default 구분자는 공백
aaa 111 zzz
bbb 222 xxx
ccc 333 yyy
ddd 444 qqq
eee 555 ddd


예시

  • awk '{print $1}' txt13 => 첫번째 필드 출력
  • awk '/검색어/{print $1}' txt13. => 문자열 검색
  • grep 111 txt13 | awk '{print $3}' txt13 => zzz출력
  • awk '/111/{print $3}' txt13 => zzz 출력

aaa;111;zzz
bbb;222;xxx
ccc;333;yyy
ddd;444;qqq
eee;555;ddd

awk -F: '{print $1}' colon_txt13 => F구분자를 통해서 구분가능
특수 문자 말고 일반적인 문자도 구분 가능
실제 예시
awk -F: '{print $1}' /etc/passwd => 사용자 이름만 출력
uptime | awk '{print $8,$9,$10}' => load average
uptime | awk '{print $8, $9, $10}' | awk -F, '{print $1,$2,$3}' => load average
uptime | awk -F"load average" '{print $2}'

'OS > Linux' 카테고리의 다른 글

백업 쉘 스크립트  (0) 2021.03.15
Shell Script 정리(디스크 용량)  (0) 2021.03.10
bash shell 명령어 정리  (0) 2021.03.07
CentOS 설치 후 자동완성이 되지 않을 경우  (0) 2021.02.25
[Linux] RAID 기본 설정 방법  (0) 2020.12.29