从shell中的命令行传递参数

时间:2012-11-21 05:42:53

标签: bash shell

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脚本中执行?

2 个答案:

答案 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