1) Linux Shell Script?
2) Code Intro
3) Code Structure & Result
4) Shell Script Use Case
Linux?
글에 앞서 Linux는 오픈소스 운영 체제를 의미합니다.
여기서 말하는 운영 체제(Operating System, OS)는 CPU, 메모리, 스토리지처럼
시스템의 하드웨어와 리소스를 직접 관리하는 소프트 웨어를 의미합니다.
Shell?
Shell(쉘)은 운영체제상에서 User의 입력명령에 따라
읽고 해석 후 실행하는 프로그램을 의미합니다.
본문은 WSL에서 bash Shell을 사용하겠습니다.
Shell 종류
1) bash : Bourne-Again Shell (프롬프트 : #, 경로 : /bin/bash)
2) sh : Bourne Shell (프롬프트 : $, 경로 : /bin/sh )
3) csh : C Shell (프롬프트 : %, 경로 : /bin/csh )
4) ksh : Kron Shell (프롬프트 : $, 경로 : /bin/ksh )
5) tsch : TENEX C Shell (프롬프트 : >, 경로 : /bin/tcsh)
Why💁♂️
주로 Linux Shell Script는 서버관리에 사용되는 사례를
많이 보았습니다. 그래서 서버관리에 사용되는 스크립트보다는
한번 일반적으로 생각나는 걸 Shell Script로 구현해보자는 생각에서 시작하였습니다.
What 🤷♂️
우선 제가만든 스크립트는 현재 경로에 있는 전체 파일명을 Python의 Upper(), lower()처럼
변환가능하게 하는 스크립트 구현이 목표였습니다.
How 🙆♂️
구조는 단순하게 스크립트 경험이 목적이기 때문에 Upper, lower 각각 .sh를 설계하고,
각각 1)명령 입력 인터페이스 / 2)처리과정로그 / 3)실행결과 및 추가작업로 구조를 설계하였습니다.
다된 결과물은 하나의 스크립트에서 Upper(upper_ffnex.sh)와 lower(ffnex.sh)를 부르는 식으로 구현하고,
alias로 언제든 현재경로에서 작업호출가능하게 마무리했습니다.
현재경로에 대한 작업 명령 지정 fenx (lower) / upper(upper)
lower 작업 실행 및 로그 확인
이미 lower처리가 된 파일명이 있는 경우 Upper로 우회작업
ffnex.sh (lower 명령)
#!/bin/bash
#ls | tr '[A-Z]' '[a-z]'
filenum=$(ls | wc -l)
str=$(ls)
i=0
a=0
locallist=$(ls -l)
clear
line="-----------------------------------------------------"
echo $line
echo "[fenx] [upper]"
echo $line
echo -n ">>"
read user
if [ $user == "upper" ]
then
echo "[UPER]"
. ~/upper_ffnex.sh
else
echo $line
echo "$locallist"
echo $line
echo -n "현재 위치에 존재하는 파일명을 변경합니다.(Y/N) >> "
read user
if [ $user == 'Y' ] || [ $user == 'y' ]
then
echo $line
for FILE_NAME in $str; do
name=$(echo $FILE_NAME | tr '[a-z]' '[A-Z]')
real=$(date "+%Y%m%d/%H:%M:%S")
mv -f $FILE_NAME $name
if [ $? == '0' ]
then
echo "["$real"] "$FILE_NAME ">>" $name "[변경 완료]"
i=`expr $i + 1`
else
if [ $FILE_NAME == $name ]
then
echo "["$real"]" 이미 변경된 파일 "[변경 실패]"
else
echo "["$real"]" $FILE_NAME ">>" $name "[변경 실패]"
fi
a=`expr $a + 1`
fi
#echo "filename " $i":"$FILE_NAME
echo $line
done
fi
echo [변경 작업 완료 파일 : $i개 '|' 변경 실패한 작업 : $a건] - 종료
if [ $user = "DOWNGRADE" ] || [ $user == "downgrade" ]
then
echo -n "전환작업을 시작하시겠습니까?(Y/N) >> "
read is_dgyn
if [ $is_dgyn == 'Y' ]
then
. ~/ffnex_test.sh
fi
fi
if [ $user == 'Y' ] && [ $a != 0 ]
then
echo -n "실패작업 우회 진행여부(Y/N) >> "
read usera
if [ $usera == 'Y' ]
then
echo -n "작업 재시작..."
clear
ffnex
fi
fi
fi
upper_ffnex.sh (upper 명령)
#!/bin/bash
#ls | tr '[A-Z]' '[a-z]'
filenum=$(ls | wc -l)
str=$(ls)
i=0
a=0
locallist=$(ls -l)
clear
line="-----------------------------------------------------"
echo $line
echo "$locallist"
echo $line
echo -n "현재 위치에 존재하는 파일명을 변경합니다.(Y/N) >> "
read user
if [ $user == 'Y' ]
then
echo $line
for FILE_NAME in $str; do
name=$(echo $FILE_NAME | tr '[A-Z]' '[a-z]')
real=$(date "+%Y%m%d/%H:%M:%S")
mv $FILE_NAME $name
if [ $? == '0' ]
then
echo "["$real"]" $FILE_NAME ">>" $name "[변경 완료]"
i=`expr $i + 1`
else
echo "["$real"]" $FILE_NAME ">>" $name "[변경 실패]"
a=`expr $a + 1`
fi
#echo "filename " $i":"$FILE_NAME
echo $line
done
fi
echo [변경 작업 완료 파일 : $i개 '|' 변경 실패한 작업 : $a건] - 종료
Shell Script의 주요 활용사례로는 아래와 같습니다.
1. 디스크 상태 및 파일 시스템 점검
2. 주요 설정파일 권한 점검
3. 프로세스 점검
4. 서비스 배포
이와 다르게 제가 본 글중 카카오 개발블로그에서 스크립트를 활용한 글을 읽은적이 있습니다.
신규 개발자가 입사하면 처음부터 환경을 셋팅하는데 애를 먹어서 환경셋팅을 스크립트로
설계하여 배포하며 스크립트 환경셋팅을 간편화하여 셋팅메뉴얼보다 더 효과적인 사례를 보았고,
또 서버 보안점검시에도 미리 체크해야할 리스트들을 점검하는
스크립트로 서버점검을 하는 모습도 보았습니다.
이렇게 서버관리에 국한된 사례뿐만 아니라 사용함에 따라
Linux shell script 활용도가 참 많다고 생각이 듭니다.
사실 이쯤되면 파일작업이라면 굳이 다른언어도 있는데 Shell Script라고 생각할수도 있지만,
Bash Script 경험해보고 싶은 마음과 서버에 적재되는 실시간 로그파일의 가공가능성을 확인해보고 싶어
스크립트로 Upper와 lower명령어를 구현해보았습니다.😅
참고자료