Created
October 2, 2021 08:10
-
-
Save anya-tokugawa/04126318cd5b5c5c7de429337c0f35fc to your computer and use it in GitHub Desktop.
アルバイト用のiCalendarジェネレーターbashスクリプト
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash -eu | |
| if [[ $# -ne 3 ]];then | |
| echo "書式: $0 [出力ICSファイル名] [西暦] [月]" | |
| exit | |
| fi | |
| FILE="$1" | |
| YEAR="$2" | |
| MONTH="$3" | |
| FIXMONTH="$(printf '02d' "$MONTH")" | |
| ################################################# | |
| # 設定 | |
| ## カレンダー名 | |
| CALENDAR_NAME="仕事予定表 ${MONTH}月" | |
| ## 予定開始時刻/終了時刻 | |
| STARTTIME="070000" # 例: 7:00:00 | |
| ENDTIME="090000" # 例: 9:00:00 | |
| LOCARION="地球ステーション, ナスカ" | |
| ## 予定タイトルを取得する箇所 | |
| _getSummary() | |
| { | |
| TYPESTR="null" | |
| TYPE="$1" | |
| # タイトルの接頭辞 | |
| PREFIX="仕事(担当箇所:" | |
| # タイトルの接尾辞 | |
| SUFFIX=")" | |
| case "$TYPE" in | |
| ## ここで入力文字列に対しての表をつくる。 | |
| "1") TYPESTR="1番ゲート: STRELKA to Stellvia, ST-102 ";; | |
| "2") TYPESTR="2番ゲート: FUJIYAMA to Stellvia, FJ-102";; | |
| "3") TYPESTR="3番ゲート: FUJIYAMA to Stellvia , FJ-101";; | |
| "4") TYPESTR="4番ゲート: GAGARIN to Stellvia, GG-201";; | |
| ##### ここは消さないこと ##### | |
| "*") TYPESTR="_INVALID_";; | |
| esac | |
| if [[ "$TYPESTR" != "_INVALID_" ]]; | |
| echo "${PREFIX}${TYPESTR}${SUFFIX}" | |
| return 0 | |
| fi | |
| echo "_INVALID_" | |
| return 1 | |
| } | |
| ################################################# | |
| if [[ -f "$FILE" ]];then | |
| echo "* ICSファイルは存在します" | |
| exit 1 | |
| fi | |
| cat << HEAD > "$FILE" | |
| BEGIN:VCALENDAR | |
| VERSION:2.0 | |
| X-WR-CALNAME: ${CALENDAR_NAME} | |
| BEGIN:VTIMEZONE | |
| TZID:Tokyo Standard Time | |
| BEGIN:STANDARD | |
| DTSTART:16010101T000000 | |
| TZOFFSETFROM:+0900 | |
| TZOFFSETTO:+0900 | |
| END:STANDARD | |
| BEGIN:DAYLIGHT | |
| DTSTART:16010101T000000 | |
| TZOFFSETFROM:+0900 | |
| TZOFFSETTO:+0900 | |
| END:DAYLIGHT | |
| END:VTIMEZONE | |
| HEAD | |
| echo "終了するときは '.' を押すこと" | |
| while : | |
| do | |
| read DAY -p "DAY [1-31]: " | |
| if [[ "$DAY" == "." ]];then | |
| break | |
| fi | |
| read TYPE -p "TYPE [1|2|3|4]: " | |
| if [[ "$TYPE" == "." ]];then | |
| break | |
| fi | |
| SUMMARY="$(_getSumamry "$TYPE")" | |
| if [[ "$SUMMARY" == "_INVALID_" ]]; | |
| echo "* 入力したタイプは存在しません" | |
| continue | |
| fi | |
| FIXDAY=$(printf '%02d' "$DAY") | |
| # イベント部分 | |
| cat << __EVENT_END__ >> "$FILE" | |
| BEGIN:VEVENT | |
| SUMMARY: $SUMMARY | |
| LOCATION: ${LOCATION} | |
| DTSTART;TZID=Tokyo Standard Time:${YEAR}${MONTH}${FIXDAY}T${STARTTIME}+0900 | |
| DTEND;TZID=Tokyo Standard Time:${YEAR}${MONTH}${FIXDAY}T${ENDTIME}+0900 | |
| CLASS:PUBLIC | |
| PRIORITY:5 | |
| TRANSP:OPAQUE | |
| CREATED: $(date -I"seconds" | tr -d ':-') | |
| STATUS:CONFIRMED | |
| SEQUENCE:2 | |
| END:VEVENT | |
| __EVENT_END__ | |
| cat << _OTHER_OPT_MEMO_ > /dev/null | |
| DESCRIPTION: foo | |
| RRULE:FREQ=WEEKLY;BYDAY=FR;INTERVAL=1;UNTIL=20141030T120000 | |
| _OTHER_OPT_MEMO_ | |
| done | |
| echo "END:VCALENDAR" >> "$FILE" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment