이 프로그램은 bash shell script언어를 이용하여 월, 일을 입력받아 해당 날짜가 무슨 요일인지 출력하는 프로그램이다.
1900년 1월 1일이 월요일이기 때문에 그 때부터 입력받은 날짜까지 지난 일 수를 구하여 7로 나누었을 때의 나머지를 통해 요일을 구할 수 있다. 소스코드는 다음과 같다.
#!/bin/bash
echo -n "type month date : "
read month date
let year=2021-1900
let sum=$year*365
let sum+=$year/4
case $month in
"1") let sum+=0;;
"2") let sum+=31;;
"3") let sum+=59;;
"4") let sum+=90;;
"5") let sum+=120;;
"6") let sum+=151;;
"7") let sum+=181;;
"8") let sum+=212;;
"9") let sum+=243;;
"10") let sum+=273;;
"11") let sum+=304;;
"12") let sum+=334;;
esac
let sum+=$date
let sum%=7
case $sum in
"0")echo "2021년 $month월 $date일은 일요일입니다.";;
"1")echo "2021년 $month월 $date일은 월요일입니다.";;
"2")echo "2021년 $month월 $date일은 화요일입니다.";;
"3")echo "2021년 $month월 $date일은 수요일입니다.";;
"4")echo "2021년 $month월 $date일은 목요일입니다.";;
"5")echo "2021년 $month월 $date일은 금요일입니다.";;
"6")echo "2021년 $month월 $date일은 토요일입니다.";;
esac
우선 올해 연도 2021에서 1900을 뺀 값에 365를 곱한다. 하지만 우리는 2월달이 29일이 되는 윤년도 생각해야한다. 윤년은 4년마다 오기 때문에 1900년부터 구하고자하는 연도를 뺀 값을 4로 나눈 값을 더해준다. 그 다음 입력한 월의 전달까지의 지난 날짜를 더한다. 그리고 입력한 달의 날짜를 더하면 1900년 1월 1일부터 2021년 입력한 날짜까지의 총 일 수가 구해지게 된다. 이 값을 7로 나누어 나누어 떨어질 경우 일요일 나머지가 1씩 증가할 때마다 월~토까지 나오게 된다.
아래 그림은 실행 결과다.
결과는 wsl2 ubuntu-20.04에서 실행하였다.
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
[Linux] 리눅스 시스템 프로그래밍 thread(스레드) 생성과 종료 (0) | 2021.08.06 |
---|---|
[Linux] 저수준 파일 입출력과 고수준 파일 입출력 (0) | 2021.07.20 |
[Linux] Bash shell script programming 소수 합 구하기 (0) | 2021.07.19 |
[Linux] Bash shell 환경 변수와 지역 변수 (0) | 2021.07.19 |
[Linux] 리눅스시스템프로그래밍 ls, chmod, touch 명령어 만들기 (0) | 2021.07.09 |