从在外壳命令行传递参数(Pass parameters from the command line

2019-09-27 11:21发布

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脚本来完成?

Answer 1:

如果您在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 。 他们有很多兼容性的,但它们是不一样的。



Answer 2:

你只需要如果通过perl的传递给引用全局参数变量。

#!/bin/bash

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

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

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


文章来源: Pass parameters from the command line in shell
标签: bash shell