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

因此,当我像这样运行 shell 脚本时,它应该从上述四个日期中获取 Date1、Date2、Date3、Date4 吗?

sh -x test1.sh Date1 Date2 Date3 Date4

可以在shell脚本中做吗?

4

2 回答 2

2

如果您在 shell 中执行您的第一个代码块,那么您将使用这些命令的输出定义 4 个变量。要访问这些变量中的任何一个,您必须$在变量名前面加上 a - 例如$DATE1.

因此,要使用这些参数运行脚本,您应该运行:

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

注意$和 区分大小写。

最后,在您的脚本中,参数是在一系列变量中接收的,这些变量以参数的顺序数调用。因此,您的第一个参数由 检索$1,第二个由检索$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

否则你可以打开一个子shell$()来返回结果

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