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);'`

以下は私のシェルスクリプト(test1.sh)で、4つの日付を印刷する必要があり、これら4つの日付はすべて上から取得する必要があります。つまり、コマンドプロンプトから以下のシェルスクリプトにのみ、これらの4つの日付より上を渡す必要があります。

#!/bin/bash

echo Date1
echo Date2
echo Date3
echo Date4

したがって、このようなシェルスクリプトを実行すると、上記の4つの日付からDate1、Date2、Date3、Date4を取得する必要がありますか?

sh -x test1.sh Date1 Date2 Date3 Date4

シェルスクリプトで行うことは可能ですか?

4

2 に答える 2

2

シェルで最初のコードブロックを実行すると、これらのコマンドの出力で4つの変数が定義されます。これらの変数のいずれかにアクセスする$には、変数名の前にaを付ける必要があります-たとえば、$DATE1

したがって、これらのパラメーターを使用してスクリプトを実行するには、次のコマンドを実行する必要があります。

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

$と大文字小文字の区別に注意してください。

最後に、スクリプトでは、引数はパラメーターの次数で呼び出される変数のファミリーで受け取られます。したがって、最初のパラメータは、によって取得され$1、2番目のパラメータはによって取得され$2ます。

したがって、スクリプトは次のようになります。

#!/bin/bash

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

また、スクリプトがによって解釈されるように指示するshe-bangを定義しているbashが、以前の呼び出しでは。を使用していたことにも注意してくださいsh。それらには多くの互換性がありますが、同じではありません。

于 2012-11-21T05:52:23.337 に答える
1

perlを介して渡す場合にのみ、グローバル引数変数を参照する必要があります。

#!/bin/bash

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

それ以外の場合は、を使用してサブシェルを開い$()て結果を返すことができます

> echo $(date "+%Y-%m-%d")
2012-11-20
于 2012-11-21T05:46:53.130 に答える