2013-01-02 105 views
2

我需要一些幫助。我用我的日期來操縱我的編程。 日期格式爲DD-MON-YY,如果用戶輸入正確的日期格式,我想檢查它。所以,我創建了一個測試功能,測試日期,月份和分別一年,但功能也可以參考「 - 」格式,所以我決定使用此代碼:剪切並保存Shell腳本

echo -n " Date [ DD-MON-YY ]:" #user will input the date 
     read dates 
     vardate=$ echo "$dates" | tr "-" " " 
     echo $vardate 

我用的就是這樣就會有當我調用函數時,對「 - 」字符沒有問題。 但現在的問題是如何保存日期[日,月,年]的3個部分?所以我的功能可以正確評估它。

我的功能:

datefxn(){ 

d1 = $date1 
d2 = $month1 
d3 = $year1 

########## check the DAY ##################### 

test ${#d1} -eq 2 || s=" INVALID!" 

if [ "$d1" -gt 0 ] && [ "$d1" -le 31 ] 
then 
    break ;; 
else 
    echo "Month is OUT OF RANGE!" 
fi 

########## check the DAY ##################### 

test ${#d2} -eq 3 || s=" INVALID!" 

MONTH=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) 
echo "${MONTH[@]}" 

for element in "${MONTH[@]}" 
do 
if [[ $element == $d2 ]] 
then 
     echo " a " 
     break 
     else 
     echo " WAAA " 
    fi 
    done 
########## check the YEAR ##################### 

test ${#d3} -eq 2 || s=" INVALID!" 


} #end datefxn() 
+0

什麼是你的錯誤信息?請注意,在變量賦值中,'='周圍不能有空格。並刪除';;' - 僅用於'case',不用於'if'。 – Jens

+0

@Jens,哦,是的。對不起,我忘了改變這條線。但是我的問題不在這個部分,我的問題在代碼的第一部分。行號3和4.'vardate = $ echo「$日期」| tr「 - 」「」 echo $ vardate'我如何將日期的修剪部分保存到3個不同的變量? – ms061210

回答

1

事情是這樣的:

#!/bin/bash 
datefxn() { 
     d1=$1 
     d2=$2 
     d3=$3 
     echo "Date is $d1" 
     echo "Month is $d2" 
} 

inp='24-12-2004'; 
vardate=$(echo "$inp" | tr "-" " ") 
datefxn $vardate 

上述解決方案是給解決您的代碼。

更新: 更好的方法可能是這樣一個使用數組和就地替代:

#!/bin/bash 

datefxn() { 
     dt=($(echo ${1//-/ })) 
     echo "Date is ${dt[0]}" 
     echo "Month is ${dt[1]}" 
     echo "Year is ${dt[2]}" 
} 

inp='24-12-2004'; 
datefxn "$inp" 
+0

並非所有的世界都使用bash ... OP可能無法使用數組。 – Jens

+0

非常感謝你@Guru :))YOu解決了我的問題:)) – ms061210