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脚本中执行?
答案 0 :(得分:2)
如果在shell中执行第一个代码块,那么您将使用这些命令的输出定义4个变量。要访问这些变量中的任何一个,您必须在变量名称前添加$
- 例如$DATE1
。
因此,要使用这些参数运行脚本,您应该运行:
bash -x test1.sh $DATE1 $DATE2 $DATE3 $DATE4
注意$
和区分大小写。
最后,在您的脚本中,在一系列变量中接收参数,这些变量使用参数的顺序调用。因此,您的第一个参数由$1
检索,第二个参数由$2
检索,依此类推。
所以,你的脚本最终成为:
#!/bin/bash
echo $1
echo $2
echo $3
echo $4
另请注意,您正在定义一个告诉脚本由bash
解释的she-bang,但您之前的调用是使用sh
。它们具有很多兼容性,但它们并不相同。
答案 1 :(得分: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