Shell指令碼之鳥哥私房菜第13章sh11

2021-06-28 04:33:13 字數 2367 閱讀 5216

最近在看《鳥哥的linux私房菜基礎學習篇(第三版)》中的第13章.

作者在講解-多重、複雜條件判斷式的時候,舉了乙個例子。輸入某人的退伍日期,然後計算他還有幾天退伍?

這個例子也就是書中的指令碼sh11.sh

這裡我們把這個指令碼稍微完善一下,

增加的功能如下:

1)增加對日期有效性的簡單檢查,比如月份不可能大於12,日期不能大於31,輸入20150231這樣的日期肯定是不行的,2月份是不可能有31天的

指令碼中不足之處:

1)即使是日期的校驗,也並沒有對於普通年份和閏年的的2月份這樣的特殊日期進行檢查

2)輸入的日期只是提示說需要大於20140314,但是並沒有對輸入日期的有效性進一步的進行檢查,比如,如果輸入昨天的日期,應該是不允許的

3)程式的本意是希望能夠列印出月份的英文名稱,但是如何將case使用的變數和數字進行比較目前還不了解

不多囉嗦了,直接上原始碼,檔名同樣命令為是sh11.sh

#!/bin/bash

#program:

# you input your demobilization date, i calculate how many days before you demobilize

#history

#2014/02/11  haiqinma first release

export path

echo "this program will try to calculate:"

echo "how many days before your demobilization date..."

read -p "please input your demobilization deate(yyyymmdd ex>20140314):" date2

date_d=$(echo $date2|grep '[0-9]\')

echo "the date your input is $date_d"

date_length=$

echo "the length of input is $date_length" 

if [ "$date_length" != "8" ]; then

echo "the length of your input is not right"

exit 1

fidate_year=$

echo "the year of input is $date_year"

date_month=$

echo "the month of input is $date_month"

if [ $date_month -lt 00 ] || [ $date_month -gt 12 ]; then

echo "you input the wrong date formate--month"

exit 1

fidate_day=$

echo "the day of input is $date_day"

if [ $date_day -gt 31 ]; then

echo "you input the wrong date fromate--day"

exit 1

fiif [ $date_day -eq 31 ]; then

case $date_mont in

"01")

echo "month-jan"

;;"03")

echo "month-mar"

;;"05")

;;"07")

;;"08")

;;"10")

;;"12")

;;*)

echo "the day and month are mismach"

exit 1

;;esac

fideclare -i date_dem=`date --date="$date2" +%s`

declare -i date_now=`date +%s`

declare -i date_total_s=$(($date_dem-$date_now))

declare -i date_d=$(($date_total_s/60/60/24))

if [ "$date_total_s" -lt "0" ];then

echo "you had been demobilization befor:"$((-1*$date_d))"ago"

else

declare -i date_h=$(($(($date_total_s-$date_d*60*60*24))/60/60))

echo "you will demobilize after $date_d days and $date_h hours"

fi

鳥哥私房菜

鳥哥 linux 私房菜 ad 在我們平時使用unix命令的時候,需要平時多積累並且整理。下面,就是我們在平時時候整理的unix命令。而且是很全面的bash內建命令.bash內建unix命令 執行當前程序環境中的程式。同source。file dotunix命令從檔案file中讀取命令並執行。空操作...

鳥哥私房菜 20

本章主要與linux的啟動有關。1 linux 啟動流程一覽 1 載入bios的硬體資訊與進行自我測試,並依據設定取得第乙個可啟動的裝置 bios會首先cmos,通過cmos讀取硬體配置。2 讀取並執行第乙個啟動裝置內mbr的boot loader mbr master boot loader 3 ...

鳥哥Linux私房菜

linux相關知識 鳥哥linux私房菜 真是人間美味啊!linux 基礎篇 引言 這部份包括了早期的red hat 6.x以及 鳥哥寫的 一 二版的基礎篇各章節文章彙整!第一部份 linux的規劃與安裝 第二部份 linux檔案 目錄與磁碟格式 第三部份 學習shell與shell scripts...