我想寫一個shell腳本將接受數據,時間驗證使用Shell腳本
- 日期格式
- 時間格式
- 日期
- 時間
從用戶將驗證日期和時間。
例如:
./test.sh mmddyyyy hhmmss 12122012 121212
應該返回正確的結果。
我想寫一個shell腳本將接受數據,時間驗證使用Shell腳本
從用戶將驗證日期和時間。
例如:
./test.sh mmddyyyy hhmmss 12122012 121212
應該返回正確的結果。
使用這個,如果你得到0您日期是否有效
date "+%d/%m/%Y" -d "03/10/2016" > /dev/null 2>&1
is_valid=$?
你可以做你正在使用帶有expr
運營商沿任if
或case
語句來解析和驗證輸入到腳本試圖什麼。關鍵是解析並將輸入的date
和time
組件轉換爲可由date --date=""
解釋的格式。您可以採取多種方法。下面是使用例如輸入一個小例子:
#!/bin/sh
[ "$#" -lt "4" ] && {
printf "error: insufficient input.\n"
printf "usage: %s datestr timestr date time\n" "${0//*\//}"
printf " eg: %s mmddyyyy hhmmss 01012011 122515\n" "${0//*\//}"
exit 1
}
datestr=
timestr=
case "$1" in
"mmddyyyy")
[ $(expr length "$3") -ne "8" ] && {
printf "error: invalid date for format.\n"
printf " '%s' != '%s'\n" "$1" "$3"
exit 1
}
datestr="$(expr substr "$3" 1 2)"
datestr="$datestr/$(expr substr "$3" 3 2)"
datestr="$datestr/$(expr substr "$3" 5 4)"
;;
*) printf "error: invalid date format '%s'\n" "$1"
;;
esac
case "$2" in
"hhmmss")
[ $(expr length "$4") -ne "6" ] && {
printf "error: invalid time for format.\n"
printf " '%s' != '%s'\n" "$2" "$4"
exit 1
}
timestr="$(expr substr "$4" 1 2)"
timestr="$timestr:$(expr substr "$4" 3 2)"
timestr="$timestr:$(expr substr "$4" 5 2)"
;;
*) printf "error: invalid time format '%s'\n" "$2"
;;
esac
printf "%s\n" "$(date -d "$datestr $timestr")"
exit 0
示例使用/輸出
$ sh datetmstr.sh mmddyyyy hhmmss 12122012 121212
Wed Dec 12 12:12:12 CST 2012
可以建立在這種方法來添加額外的日期/時間輸入格式。 POSIX shell沒有最大的字符串處理例程選擇,但對於這種類型的工作已經足夠了。
這太寬了。請顯示[mcve]並檢查[問]。 – fedorqui