最近在看《鳥哥的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...