Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux cal 命令完整指南:查看日曆、指定月份年份、多月顯示與腳本應用

編輯:關於 Linux

cal 是 Linux 系統內建的日曆查看工具,支援公曆 (格里曆) 顯示,參數豐富,適合終端快速查閱、腳本嵌入與日期計算。本文全面解析 cal 語法、參數、實戰範例與進階應用技巧。

命令語法

cal [選項] [[月份] 年份]
  • 無參數:顯示當月日曆
  • 單一數字:視為年份 (1-9999),顯示全年
  • 兩個數字:月份 (1-12) + 年份,顯示指定月份

常用參數詳細表

參數功能範例
-1顯示單月 (預設行為)cal -1
-3顯示上月、本月、下月三個月cal -3
-s週日為每週第一天 (美式預設)cal -s
-m週一為每週第一天 (ISO 8601/歐式)cal -m
-j顯示一年中的第幾天 (儒略日格式,1月1日為1)cal -j
-y顯示指定年份完整日曆cal -y 2024
-V顯示版本資訊cal -V

實戰範例集

需求命令輸出說明
當月日曆cal高亮當天 (若終端支援)
指定月份 (2024 年 9 月)cal 9 2024或 cal 09 2024
指定年份全年cal 2024 或 cal -y 202412 個月網格排列
三個月連續顯示cal -3上月、本月、下月
週一為首日 (中文習慣)cal -mISO 週制
查看今天是第幾天cal -j如 3月18日 → 78 (非閏年)
指定月份儒略日cal -j 9 2024顯示 9 月每日對應年積日

進階應用技巧

1. 腳本嵌入:判斷某月天數

#!/bin/bash
# get_days_in_month.sh
MONTH=$1
YEAR=$2
# cal 輸出最後一行即為該月最後幾天,取最後一個數字
cal $MONTH $YEAR | awk 'NF {last=$NF} END {print last}'
# 用法:./get_days_in_month.sh 2 2024 → 29 (閏年)

2. 結合 ncal (替代實現,功能更豐富)

ncal -w        # 顯示週數 (ISO 週號)
ncal -M        # 週一為首日
ncal -b        # 高亮當天 (需終端支援)
ncal -3        # 三個月
# ncal 輸出為直向排列,適合窄終端

3. 日期計算組合

# 取得下個月第一天日期
date -d "$(date +%Y-%m-01) +1 month" +%Y-%m-%d

# 取得本月剩餘天數
DAYS_IN_MONTH=$(cal | awk 'NF {last=$NF} END {print last}')
DAY_NOW=$(date +%d)
echo $((DAYS_IN_MONTH - DAY_NOW))

4. 多語言環境 (LANG/LC_TIME)

# 中文顯示
LANG=zh_CN.UTF-8 cal 9 2024
# 輸出:九月 2024 / 日 一 二 三 四 五 六

# 英文顯示
LANG=en_US.UTF-8 cal 9 2024
# 輸出:September 2024 / Su Mo Tu We Th Fr Sa

cal vs ncal vs date

命令特色適用場景
cal傳統、橫向月曆、輕量快速查閱、腳本嵌入
ncal直向排列、支援週號、高亮窄終端、需要週數
date單一日期資訊、格式化、運算時間戳、格式轉換、計算

常見問題

現象原因/解決
年份超出 1-9999 報錯cal 僅支援 1-9999 年,超出請用 date 計算
月份參數 0 或 13 報錯月份範圍 1-12
輸出亂碼終端編碼與 LANG 不匹配,設定 export LANG=en_US.UTF-8
無法高亮當天傳統 cal 不支援高亮,改用 ncal -b 或 cal | grep --color -E \"(^| )$(date +%e)( |$)\"

cal 雖小,參數組合靈活,配合 date、awk 即可構建強大的日期處理單行腳本,是 Shell 程式設計師工具箱中的利器。

Copyright © Windows教程網 All Rights Reserved