📌  相关文章
📜  用于增强日历以接受 MM、MMM、YYYY 的 Shell 脚本

📅  最后修改于: 2022-05-13 01:57:27.266000             🧑  作者: Mango

用于增强日历以接受 MM、MMM、YYYY 的 Shell 脚本

我们将编写一个 shell 脚本来增强日历以接受任何月份作为 MM 或 MMM 或仅接受年份作为 YYYY 或月份和年份。我们的 shell 脚本将接受至少一个参数,即月份或年份。最多使用 2 个参数,分别是月和年。将使用指定的参数显示增强的日历。我们将在 Linux 中使用 cal 和 ncal 命令来显示日历。

方法一:使用cal命令

如果用户想要在 Linux 终端中快速查看日历,则 cal 是适合您的命令。默认情况下,cal 命令显示当前月历作为输出。

Linux 中的 cal 命令用于查看特定月份或全年的日历。 cal 命令中的单个参数定义要显示的四位数年份 (1-9999)。月 (1-12) 和年 (1 – 9999) 由两个参数表示。如果没有给出参数,则显示当前月份。

我们可以使用以下命令来了解更多关于 Linux 中的 cal 实用程序:

man cal

例如:



方法:

  1. 开始
  2. 检查参数是否传递
  3. 如果没有传递参数,则显示“无效参数并退出程序”
  4. 如果传递了 2 个参数,则
  5. 检查第一个参数是否大于 12,第二个参数是否大于 2021(当年)。
  6. 如果大于,则显示“无效的年或月”并转到步骤12
  7. 否则,如果只传递一个参数,则检查它是否大于 12。
  8. 如果大于 12,则视为一年。
  9. 然后显示指定年份的日历。
  10. 否则,如果参数小于 12,则传递的参数是一个月。
  11. 显示当年指定月份的日历。
  12. 出口。

以下是使用 cal 命令的实现:-

# Shell Script to Enhance the Calendar to Accept 
# MM, MMM, YYYY using cal command

# check whether arguments are passed or not
if [ $# -eq 0 ]
then

        # if arguments are not passed then display this
        echo "Invalid Arguments"
        
        # exit the program
        exit 
fi 

# if 2 arguments are passed
if [ $# -eq 2 ]    
then

    # if argument 1 is greater than 12 or argument 2 
    # is greater than 2021
    if [ $1 -gt 12 -o $2 -gt 2021 ]
    then
    
        # then display invalid month or year
        echo "invalid Year or month"
        
    # else display calender of the specified month 
    # and year
    else
        ncal $1 $2    
    fi
    
# if only one argument is passed then
else if [ $# -eq 1 ]
then

    # if argument is greater than 12
    if [  $1 -gt 12 ]
    then
        cal $1 # display calender of specified year
        
    # else display calender of specified month
    else
        case $1 in #start switch case
            01) m = jan;;
            02) m = feb;;
            03) m = mar;;
            04) m = apr;;
            05) m = may;;
            06) m = jun;;
            07) m = jul;;
            08) m = aug;;
            09) m = sep;;
            10) m = oct;;
            11) m = nov;;
            12) m = dec;;
        esac # end switch case
        echo \" Calander for $1 Month : \"
        
        # display calender of specified month using -m
        cal -m $1

    fi
fi
fi

输出:

方法二:使用ncal命令

ncal 命令也可用于显示日历。 ncal 命令具有与 cal 相同的功能,除了它可以垂直显示日历,列中的周而不是水平。我们可以使用以下命令来了解更多关于 Linux 中的 cal 实用程序:

man ncal

例如:

在上面的例子中,在cal或ncal命令中,如果用户在终端中输入“cal 2”命令,则会显示0002年的整个日历。但为了增强日历,如果用户输入2作为参数则应显示当前年份的第二个月。我们将使用 cal/ncal 实用程序来增强日历以接受 MM、MMM、YYYY。



以下是使用 ncal 命令的实现:-

# Shell Script to Enhance the Calendar to Accept MM, MMM, YYYY
# using ncal command

# check whether arguments are passed or not
if [ $# -eq 0 ]
then

        # if arguments are not passed then display this
        echo "Invalid Arguments"  
        
        # exit the program
        exit 
fi 

if [ $# -eq 2 ]    # if 2 arguments are passed
then

    # if argument 1 is greater than 12 or argument 2 is 
    # greater than 2021
    if [ $1 -gt 12 -o $2 -gt 2021 ]     
    then
    
        # then display invalid month or year
        echo "invalid Year or month"    
        
    # else display calender of the specified month and year    
    else
        ncal $1 $2    
    fi
else if [ $# -eq 1 ] # if only one argument is passed then
then
    if [  $1 -gt 12 ]    # if argument is greater than 12
    then
        cal $1 # display calender of specified year
    else     # else display calender of specified month
        case $1 in #start switch case
            01) m = jan;;
            02) m = feb;;
            03) m = mar;;
            04) m = apr;;
            05) m = may;;
            06) m = jun;;
            07) m = jul;;
            08) m = aug;;
            09) m = sep;;
            10) m = oct;;
            11) m = nov;;
            12) m = dec;;
        esac # end switch case
        echo \" Calander for $1 Month : \"
        ncal -m $1 # display calender of specified month using -m

    fi
fi
fi
#end if

输出:

ncal 命令将以更增强的方式显示日历。

在脚本中,如果用户输入一个参数,那么我们将检查它是否大于 12,如果它大于 12,则该参数将被视为一年,否则参数将被视为一个月。如果没有给出参数,则显示“无效参数”。如果给出 2 个参数,那么它将表示一个月和一年。

要运行 shell 脚本,请使用:

./cal.sh  

示例

./cal.sh 4
./cal.sh 8 2021
./cal.sh 1999

使用以下命令授予 shell 脚本执行权限:

chmod +x cal.sh

因此,上述 Shell 脚本将增强日历以接受 MM、MMM、YYYY。