imhamburger 님의 블로그

리눅스(Linux) - 쉘스크립트로 코드 작성하기 본문

리눅스(Linux)

리눅스(Linux) - 쉘스크립트로 코드 작성하기

imhamburger 2024. 7. 13. 15:00

문제

_SUDDEN 이라는 파일이 있을 때 "SUDDEN!!!"을 외친다. 그리고 3초 간격으로 실행된다. 없을 때는 "check" 를 외친다. 3초 간격으로 실행된다.

 

처음 내가 작성한 코드

#!/bin/bash

FILE=~/tmp/_SUDDEN

while true
do
  if [ -e "$FILE" ]; then
      echo "SUDDEN!!!"
      sleep 3
  else
      echo "check"
      sleep 3
  fi
done

 

실행했을 때는 문제가 없어보이지만 이 코드는 잘못된 코드이다. 

결론부터 말하자면, if문 안에 sleep 3 을 넣으면 CPU가 엄청 높아진다.

 

왜냐하면 전체적으로 봤을 때는 실행속도가 주어지지않아 계속해서 컴퓨터가 돌아가며 "SUDDEN!!!"이 나오는 것을 3초 간격으로 실행되고 있기 때문이다. 표면상에는 아무런 문제가 없어보이지만 CPU를 확인하면 갑자기 숫자가 높아지므로 좋지 않은 코드이다.

 

따라서 아래와 같이 코드를 작성해야 성능을 고려한 코드라 할 수 있다.

 

#!/bin/bash

FILE=~/tmp/_SUDDEN

while true
do
  if [ -e "$FILE" ]; then
      echo "SUDDEN!!!"
  else
      echo "check"
  fi
  sleep 3
  
done​

 

 

더 나아가 시간도 함께 나오게끔 추가하였다. 처음에는 DATE 변수를 True일 때와 False일 때 둘 다 넣었었다. 

#!/bin/bash

FILE=~/tmp/_SUDDEN

while true
do

  if [ -f "$FILE" ]; then
      DATE=$(date +"%Y%m%d %H:%M:%S")
      echo "$DATE,SUDDEN!!!"
  else
      clear
      figlet KIA
      DATE=$(date +"%Y%m%d %H:%M:%S")
      echo $DATE
  fi
  sleep 3
done

 

그러나 True일 때나 False일 때나 나오는(조건 상관없이) 변수이기 때문에 if 조건문 안에 넣는 것이 아닌 if 조건문 밖으로 빼주었다.

#!/bin/bash

FILE=~/tmp/_SUDDEN

while true
do
DATE=$(date +"%Y%m%d %H:%M:%S")

  if [ -f "$FILE" ]; then
      echo "$DATE,SUDDEN!!!"
  else
      clear
      figlet KIA
      echo $DATE
  fi
  sleep 3
done

 

True 일 때,

 

False 일 때,

 

*끄적끄적

터미널에서 top 명령어는 CPU 현재 얼마나 쓰이고 있는지 확인할 수 있다.

 

이 코드를 작성하면서 같은코드가 반복되는 것은 좋지 않은 코드이며, 컴퓨터가 효율적으로 돌아갈 수 있게끔 코드를 짜야 좋은 코드라는 것을 배웠다.