2012-11-21 55 views
1
DATE1=`perl -e 'use POSIX qw(strftime); print strftime "%Y-%m-%d",localtime(time()- 3600*72);'` 

DATE2=`perl -e 'use POSIX qw(strftime); print strftime "%Y%m%d",localtime(time()- 3600*72);'` 

DATE3=`perl -e 'use POSIX qw(strftime); print strftime "%Y%m%d",localtime(time()- 3600*48);'` 

DATE4=`perl -e 'use POSIX qw(strftime); print strftime "%Y/%m/%d",localtime(time()- 3600*48);'` 

下面是我的shell腳本(test1.sh),其中我需要打印四個日期,所有這四個日期應該來自上面。這意味着我需要將以上四個日期從命令提示符傳遞給下面的shell腳本。從外殼的命令行傳遞參數

#!/bin/bash 

echo Date1 
echo Date2 
echo Date3 
echo Date4 

所以,當我運行像這個 - 它應該得到日期1,日期2,DATE3,Date4從以上四個日期的shell腳本?

sh -x test1.sh Date1 Date2 Date3 Date4 

是否可以在shell腳本中執行?

+0

如果系統具有GNU日期,'DATE4 = $(日期-d'現在 - 48小時的 「+%Y /%米/%d」)'是更可讀 –

回答

2

打開一個子shell如果您在shell執行你的第一個代碼塊,那麼你就必須定義4個變量與這些命令的輸出。要訪問這些變量中的任何一個,必須在變量名稱前加上$,比如$DATE1

因此,對於運行這些參數你的腳本,你應該運行:

bash -x test1.sh $DATE1 $DATE2 $DATE3 $DATE4 

,請注意$和案例敏感。

最後,在你的腳本,參數在變量的家庭被稱爲用的參數的順序號收到。所以,你的第一個參數是$1,第二個參數是$2,依此類推。

所以,你的腳本最終是:

#!/bin/bash 

echo $1 
echo $2 
echo $3 
echo $4 

關注也正在定義一個她邦告訴腳本由bash解釋,但是你前面調用使用sh。他們有很多兼容性,但他們不一樣。

1

如果通過perl傳遞,則只需引用全局變元變量。

#!/bin/bash 

echo "$1" # Date1 
echo "$2" # Date2 
echo "$3" # Date3 
echo "$4" # Date4 

否則你可以使用$()返回結果

> echo $(date "+%Y-%m-%d") 
2012-11-20