亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
123下一頁
最近訪問板塊 發(fā)新帖
查看: 6132 | 回復(fù): 24
打印 上一主題 下一主題

請教判斷日期和read的變量不正確重新輸入的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-06-20 14:05 |只看該作者 |倒序?yàn)g覽
本帖最后由 sxtywyg 于 2012-06-20 14:06 編輯

我的腳本的需求是日期變量date的格式是YYYY-MM-DD HH:MM(請注意,DD和HH之間有空格),如果輸入
的日期不符合,就重新通過READ輸入.

#!/bin/bash
while :
do
read date
if [[ $date = "[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]\ [0-23]:[0-59]" ]];  then
echo "YES"
exit 0
else
echo "NO"
break
fi
done

我現(xiàn)在面臨兩個問題:
1、判斷語句,如果只有日期,不加\ [0-23]:[0-59],可以準(zhǔn)確判斷,如果加了小時:分鐘的話,就報錯。
2、如果判斷可以判斷出輸入的日期格式不對的話,怎么能使用循環(huán)返回原先的read date,重新輸入日期。

謝謝

論壇徽章:
0
2 [報告]
發(fā)表于 2012-06-20 14:27 |只看該作者
回復(fù) 1# sxtywyg


1、判斷語句,如果只有日期,不加\ [0-23]:[0-59],可以準(zhǔn)確判斷,如果加了小時:分鐘的話,就報錯。

這個。。按你上面的寫法,小時分鐘部分應(yīng)該寫成[0-2][0-9]:[0-9][0-9]
當(dāng)然只能識別數(shù)字,如果要求不能輸入29:72這樣的,那只能換成數(shù)字的方法去判斷


2、如果判斷可以判斷出輸入的日期格式不對的話,怎么能使用循環(huán)返回原先的read date,重新輸入日期。

其實(shí)格式字符串的判斷可以試試用date命令進(jìn)行格式化輸出,也沒必要限定輸入格式,輸入能被date命令識別就行了
具體參考:man date

論壇徽章:
0
3 [報告]
發(fā)表于 2012-06-20 14:40 |只看該作者
本帖最后由 personball 于 2012-06-20 14:41 編輯

回復(fù) 1# sxtywyg


    舉個例子:

  1. personball@vostro:~$date --rfc-3339='seconds' -d "2011-06-20 14:00:00"
  2. 2011-06-20 14:00:00+08:00
  3. personball@vostro:~$date --rfc-3339='seconds' -d "2011-06-20 14:99:00" 
  4. date: invalid date `2011-06-20 14:99:00'
  5. personball@vostro:~$
復(fù)制代碼
輸入字符串有問題時,date命令執(zhí)行就會返回錯誤代碼,執(zhí)行成功就說明字符串沒問題

論壇徽章:
0
4 [報告]
發(fā)表于 2012-06-20 14:45 |只看該作者
本帖最后由 sxtywyg 于 2012-06-20 14:48 編輯
personball 發(fā)表于 2012-06-20 14:27
回復(fù) 1# sxtywyg


謝謝

再詳細(xì)描述一下我的需求:

我現(xiàn)在制作了一個菜單化腳本,要獲取日志,日志目錄下存在大量的日志文件,我想通過獲取某個時間段,來自動化獲取日志并FTP,下面是部分代碼

echo -e -n "\t請選擇 [1,Q]>"
read choice2
case $choice2 in
1) while :
do
echo -e "\t請輸入所需日志起始時間:<YYYY-MM-DD HH:MM>"
read date1
if [[ "$date1" != [0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\ [0-9]{2}:[0-9]{2} ]]; (這個就沒起作用)
then
read date1 (無論輸入什么日期,都返回"請輸入所需日志起始時間",無法執(zhí)行下面的代碼)
else
touch -d "$date1" /root/file1
fi
done
while :
do
echo -e "\t請輸入所需日志結(jié)束時間:<YYYY-MM-DD HH:MM>"
read date2
if [[ "$date2" != [0-9]\{4}-[0-9]{1,2}-[0-9]{1,2}\ [0-9]{2}:[0-9]{2} ]];
then
read date2
else
touch -d "$date2" /root/file2
fi
done
find /root -newer file1 -a ! -newer file2 -a -type f -print | xargs ls -alt | grep -v ^d
while :
do
echo -e -n "\t請選擇需要的日志:"
read log
cd /root
if [ -f $log ];then
cp $log /tmp/bak
cd /tmp/bak
tar -cvf bak.tar /tmp/bak/*
rm -rf $log
get_myserver_nohup.out (這個是定義可以FTP的函數(shù))
echo -e "\t上傳成功\n"
exit 0
else
echo -e "\tFault Choice"
fi
done
;;

我上面開始提問的腳本,是我單獨(dú)想實(shí)現(xiàn)我描述的兩個功能,
如果按照你說的,使用date -d格式化輸出日期的話,是不是會有問題?我的理由是:

find /root -newer file1 -a ! -newer file2 -a -type f -print | xargs ls -alt | grep -v ^d
這個發(fā)現(xiàn)的日志是按照系統(tǒng)格式的時間輸出,模式的時間格式好象是YYYY-MM-DD HH:MM:SS (不過我這里不需要秒了,有分鐘就足夠了)

論壇徽章:
1
巳蛇
日期:2013-10-28 15:55:33
5 [報告]
發(fā)表于 2012-06-20 14:56 |只看該作者
本帖最后由 惟吾無為 于 2012-06-20 15:03 編輯
  1. # f(){ IFS="-: "; read -p "yyyy mm dd HH MM " y m d H M; [ -z "$y" ] && return 9; [ $y -le 0 -o $y -gt 2038 ] && return 8; echo "$y-$m-$d $H:$M"; return 0;}
  2. # f
  3. yyyy mm dd HH MM 2012 01 2 1 3
  4. 2012-01-2 1:3
  5. # f
  6. yyyy mm dd HH MM 2102-1-2 13:12
  7. # echo $?
  8. 8
  9. # f
  10. yyyy mm dd HH MM 2001-1-1 13:12
  11. 2001-1-1 13:12
復(fù)制代碼
檢測部分就自己寫吧。
其實(shí)沒必要要求輸入的格式那么復(fù)雜,完全可以要求以空格隔開,這樣就不必修改IFS了,然后自己定制輸出格式。

bash實(shí)測, 其他shell自測。

論壇徽章:
0
6 [報告]
發(fā)表于 2012-06-20 15:13 |只看該作者
回復(fù) 5# 惟吾無為

我如果不按照YYYY-MM-DD HH:MM這種格式定義的話


find /root -newer file1 -a ! -newer file2 -a -type f -print | xargs ls -alt | grep -v ^d

我這個語句里的ls -alt是按照系統(tǒng)的時間格式輸出的,這個的時間格式好象就是YYYY-MM-DD HH:MM,那么我能獲取和之匹配的時間嗎?
   

論壇徽章:
0
7 [報告]
發(fā)表于 2012-06-20 15:29 |只看該作者
回復(fù) 4# sxtywyg


    額,我的意思是輸入的時間字符串是否真正符合要求(比如要判斷6月31日是不存在的),是可以通過date命令 -d 選項(xiàng)嘗試,以借助date命令進(jìn)行識別
如果你要用該字符串進(jìn)行對比的話,那也可以使用date命令進(jìn)行輸出的。。。
先給個判斷輸入是否為時間的代碼
  1. personball@vostro:SHELL$./dateTest
  2. please enter(YYYY-MM-DD HH:MM):
  3. 2010-06-30 22:11
  4. personball@vostro:SHELL$./dateTest
  5. please enter(YYYY-MM-DD HH:MM):
  6. 2010-06-31 22:11
  7. Wrong format!
  8. please enter(YYYY-MM-DD HH:MM):
  9. ^C
  10. personball@vostro:SHELL$cat dateTest
  11. #!/bin/bash
  12. startTime="" #YYYY-MM-DD HH:MM
  13. mark=1
  14. while [ $mark -ne 0 ]
  15. do
  16. echo "please enter(YYYY-MM-DD HH:MM):"
  17. read startTime
  18. startTime=$startTime":00"
  19. mark=`date --rfc-3339='seconds' -d "$startTime" 2>1 1>/dev/null;echo $?`
  20. if [ $mark -ne 0 ]
  21. then
  22. echo "Wrong format!"
  23. fi
  24. done
復(fù)制代碼
date命令對時間字符串處理
  1. personball@vostro:~$date -d "Jan 20 2012" --rfc-3339='seconds'
  2. 2012-01-20 00:00:00+08:00
  3. personball@vostro:~$date -d "Jan 20 2012"
  4. Fri Jan 20 00:00:00 CST 2012
  5. personball@vostro:~$
復(fù)制代碼

論壇徽章:
0
8 [報告]
發(fā)表于 2012-06-20 16:12 |只看該作者
本帖最后由 sxtywyg 于 2012-06-20 16:15 編輯

回復(fù) 7# personball

11.#!/bin/bash

12.startTime="" #YYYY-MM-DD HH:MM

13.mark=1

14.while [ $mark -ne 0 ]

15.do

16.echo "please enter(YYYY-MM-DD HH:MM):"

17.read startTime

18.startTime=$startTime":00"

19.mark=`date --rfc-3339='seconds' -d "$startTime" 2>1 1>/dev/null;echo $?` (無論我輸入的格式是否正確,都提示W(wǎng)rong format)

20.if [ $mark -ne 0 ]

21.then

22.echo "Wrong format!"

23.fi

24.done

煩請幫我看看,謝謝.

不好意思,看到錯誤輸出了.

[root@test ~]# cat 1
date:無法識別的選項(xiàng)“--rfc-3339=seconds”
請嘗試執(zhí)行‘date --help’來獲取更多信息。

是不是因?yàn)橄到y(tǒng)的locale不符合這個規(guī)范啊?

論壇徽章:
0
9 [報告]
發(fā)表于 2012-06-20 16:17 |只看該作者
本帖最后由 personball 于 2012-06-20 16:21 編輯

回復(fù) 8# sxtywyg


    - -不會吧,我自己運(yùn)行過的。。。你輸入的 是 YYYY-MM-DD HH:mm  格式么?


額,man date 看看?
可能你默認(rèn)的就是這個規(guī)范,你試試去掉這個選項(xiàng)再執(zhí)行。。。 因?yàn)槲疫@邊執(zhí)行date的時候輸出的月份是英文字母的 - -所以才用了這個選項(xiàng)。。

論壇徽章:
0
10 [報告]
發(fā)表于 2012-06-20 16:44 |只看該作者
回復(fù) 9# personball


你這個如果輸入不是按照YYYY-MM-DD HH:MM格式也能成功?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP