관리 메뉴

IT창고

쉘 스크립트 if문 3 본문

프로그래밍/Shell Script

쉘 스크립트 if문 3

방구석여포 2020. 10. 19. 00:36

이번에는 if문과 awk 명령어를 사용해 좀 더 복합적으로 사용해보도록 하겠습니다. 

 

먼저 쉘 스크립트를 작성 시 도움이되는 명령어 awk에 대해 알아보도록 하겠습니다.

awk는 주로 리눅스 스크립트를 사용할 때 자주 사용되며 패턴, 텍스트, 연산 등에 주로 사용되며 awk를 단독으로 사용하기 보단 grep이나 다른 명령어들과 함께 사용됩니다. 

 

더 정확하게 확인하자면 데이터를 조작하고 리포트를 생성하기 위해 사용하는 언어로 리눅스에서 사용하는 awk는 GNU 버전의 gawk로 확인이 가능합니다. awk의 제작자는 3명으로 Alfred Aho, Peter Weinberger, Brian Kernighan 이들의 이름앞 이니셜을 가져와서 awk라고 부릅니다.

 

awk 명령어 형식은 아래와 같습니다.

awk [option] [awk program (pattern {action})] [argument] 

 

awk 명령어 형식은 위와 같으며 awk에 사용될 옵션에 대해 알아보도록 하겠습니다.

awk 옵션 설명
-F 필드 구분 문자 지정
-f awk program에서 사용딜 파일 경로 지정
-v awk program에서 사용될 변수 지정
-u 버퍼를 사용하지 않고 출력

위는 awk명령어로 -F 옵션을 사용하여 ':'를 구분자로 사용해 test.txt파일에 텍스트를 출력하였습니다. 

$n 필드에 숫자로 해당 필드에 단어를 출력하게 됩니다. 

 

awk program에 사용되는 함수 패턴 몇가지를 알아보도록 하겠습니다.

pattern 설명
print 문자열을 출력
printf 지정된 포맷 형식에 따라 문자열 출력 (printf "format" [expressions] [file])
system 시스템 내부 명령어를 실행
int 정수형으로 값을 리턴
rand 0과 1사이에 난수를 발생
length 문자열 길이를 반환
match 문자열에서 정규표현식과 매칭되는 부분 위치를 넘김 (match(문자열,정규표현식))
sub 지정한 문자열을 치환
gsub 문자열을 일괄 치환
substr 시작위치에서 주어진 길이만큼 문자열 치환

 

awk에 대해 어느정도 확인해보았으므로 이전 글에서 배운 내용으로 쉘 스크립트를 작성하도록 하겠습니다.

만들어볼 스크립트는 리눅스의 서버정보, CPU, RAM, HDD를 확인하는 쉘 스크립트 입니다.

위의 사진과 같은 결과는 아래의 소스코드에서 확인 가능한 쉘 스크립트로 만들어졌습니다.

#!/bin/bash
#simple helth_check script
#author: gsk121

export LANT=ko_KR.eucKR

echo "--------------------------- Server Info ------------------------------"
gsk_main=`dmidecode -t system | grep -i "manufacturer" | awk -F ':' '{print $2}'`
gsk_name=`dmidecode -t system | grep -i "product name" | awk -F ':' '{print $2}'`
gsk_serial=`dmidecode -t system | grep -i "serial number" | awk -F ':' '{print $2}'`
gsk_borad=`dmidecode -s baseboard-product-name`

echo "시스템 제조업체= "$gsk_main
echo "시스템 상품명= "$gsk_name
echo "시스템 시리얼 번호 = "$gsk_serial
echo "시스템 메인보드 모델명 = "$gsk_borad

echo ""
echo "---------------------------- CPU Info --------------------------------"
gsk_cpu=`(grep name /proc/cpuinfo | sort -u | awk -F ':' '{print $2}')`
gsk_cpuuse=`sar -u | grep -i average | awk -F" " '{print $3,"%"}'`

echo "CPU 정보= "$gsk_cpu
echo "CPU 사용률 = "$gsk_cpuuse


echo ""
echo "---------------------------- Memory Info --------------------------------"
gsk_mem1=`free | grep Mem | awk '{printf $2}'`
gsk_mem2=`free | grep Mem | awk '{printf $3}'`
gsk_check=`echo 'scale=4;'$gsk_mem2/$gsk_mem1*100 | bc`
echo "Memory 사용률= "$gsk_check "%"



echo ""
echo "---------------------------- HDD Info --------------------------------"
df -h
cat /etc/fstab | grep -v '#'

echo ""
echo ""

echo "프로세스도 추가로 확인합니까? (번호를 선택해주세요)"
echo "(1. 프로세스를 확인한다  2. 프로세스를 확인하지 않는다)"
read gsk

if [ $gsk = 1 ]; then
    echo "---------------------------- Process Check --------------------------------"
    ps -ef | grep -v 'grep' | egrep -i 'httpd'
    ps -ef | grep -v 'grep' | egrep -i 'ssh'
    exit 0
  else
    exit 0

fi

키보드 입력하는 시간이 걸릴 뿐 복잡한 쉘 스크립트는 아니므로 배운 내용을 종합하여 간단한 스크립트를 위와 같이 만들어볼 수 있습니다.

 

최대한 다양한 방식으로 만들어 보았으며 if문을 추가하여 스크립트에 적용해 보았습니다.

프로세스를 확인하는 부분에 대해서는 직접 입력 명령어를 입력하여 한줄씩 추가가 가능한데 이러한 부분은 반복적인 작업으로 매우 귀찮기에 반목문인 for문을 사용해주는게 좋습니다. for문에 대해서는 다음글에서 알아보도록 하겠습니다. 

'프로그래밍 > Shell Script' 카테고리의 다른 글

쉘 스크립트 while문  (0) 2020.11.05
쉘 스크립트 for문  (0) 2020.11.03
쉘 스크립트 if문 2  (0) 2020.10.17
쉘 스크립트 if문 1  (0) 2020.10.10
쉘 스크립트 기초 2  (0) 2020.10.07
Comments