본문 바로가기
놀기/기초 공부

[Shell Script] 시간 설정하기 (grep, head, regex)

by Hi~ 2023. 5. 27.

RTC가 없는가 없거나 시간 유지를 위한 배터리가 없는 시스템의 경우, 리부팅을 하면 시간을 다시 설정해야 한다. PC 메인보드의 배터리가 수명을 다했을 때, 시간 설정을 다시 해줘야 하는 것과 같은 것이라 생각하면 된다. 부팅하여 시간을 받을 NTP 서버가 있거나 시간을 주는 장치가 있다면 모르겠지만, 그렇지 않은 경우 직접 설정해야 한다. 이런 경우 좋은 방법은 아니지만 자구책으로 리부팅 후 시간 설정을 위한 정보 값을 남겨두는 방법을 사용할 수 있다. /tmp/lastdate 파일을 만들어 주기적으로 시간을 업데이트하고 리부팅 후 해당 값을 사용하여 시간 설정을 하는 스크립트를 만들어 보자. 스크립트를 더 예쁘게 만들 수도 있겠지만 목적 달성이 목표이므로 간단히...

 

#!/bin/sh

# 먼저 /tmp/lastdate 파일이 있는지 확인
if [ -f /tmp/lastdate ]
then
        # 파일의 첫 문자열에만 관심이 있으므로 cat이 아닌 head 명령어를 사용
        # grep에 옵션을 주어 원하는 형태에 맞는 문자열인지 확인
        lastdate=`head -n 1 /tmp/lastdate | grep -oE "\b([0-9]{4}\-)([0-9]{2}\-)([0-9]{2}) (([0-9]{2}):){2}([0-9]{2})\b"`
        
        # 실행 결과의 반환값을 확인
        # 일반적으로 0이면 성공. 만약 프로그램에서 다른 값을 준다면 그것에 맞춰서...
        rtn=`echo $?`
        if [ "$rtn" -eq 0 ]
        then
                # OK !!!! 찾을 값을 date 명령어를 사용하여 시간 설정
                echo "O"
                date --set "$lastdate"
                
        else 
                echo "X"
        fi
fi

 

테스트

테스트를 위한 파일을 만든다.
$ echo "2023-05-01 10:10:11" > /tmp/lastdate

아래와 같이 실행하면 결과가 아래와 같이 출력된다.
$ ./settime.sh                              
O
Mon May  1 10:10:11 UTC 2023​

 

 

 

댓글