bash - 如何将arg值传递给cronjob中的shell脚本

时间:2011-05-10 21:14:10

标签: bash shell unix

我有一个看起来像这样的cron条目:(传入5个输入)

30 10 * * 5 sh /home/test.sh hostnm101.abc /mypath/dir test foobar F008AR >> /logs/mytst.log 2>&1

我想更改它,因此我将输入(4,5)foobarF008AR存储在一个单独的文件中并通过 script test.sh($ 4,$ 5)

test.sh

#!/bin/bash

if [ $# != 5 ]; then
    exit 1
fi

DIRDT=`date '+%Y%m%d'`
TSTDIR=$2/test/$DIRDATE
[ ! -d "$TSTDIR" ] && ( mkdir "$TSTDIR" || { echo 'mkdir command failed'; exit 1; } )

perl /home/dev/tstextr.pl -n $1 -b $2 -d $TSTDIR/ -s $3 -u $4 -p $5 -f $DIRDT

对于那些(2)输入值,有没有简单的方法在cron中执行此操作?感谢。

2 个答案:

答案 0 :(得分:1)

好的就这样试试。

1)创建一个单独的文件/mypath/dir/login.info,内容如下(用户名/密码在不同的行中):

foobar
F008AR


2)修改你的test.sh:

#!/bin/bash
if [ $# != 4 ]; then
    exit 1
fi

DIRDT=`date '+%Y%m%d'`
TSTDIR=$2/test/$DIRDATE
[ ! -d "$TSTDIR" ] && ( mkdir "$TSTDIR" || { echo 'mkdir command failed'; exit 1; } )

IFS="
"
arr=( $(<$2/$4) )
#echo "username=${arr[0]}   password=${arr[1]}"

perl /home/dev/tstextr.pl -n $1 -b $2 -d $TSTDIR/ -s $3 -u ${arr[0]} -p ${arr[1]} -f $DIRDT


3)你的cron命令是这样的:

30 10 * * 5 sh /home/test.sh hostnm101.abc /mypath/dir test login.info >> /logs/mytst.log 2>&1

摘要

  • IFS代表bash中的内部字段分隔符(IFS)

我正在使用它:

IFS="
"

这意味着将新行字符作为字段分隔符(因为我们将用户名和密码存储在2个单独的行中)。然后这一行将文件/mypath/dir/login.info读入数组:

arr=( $(<$2/$4) )
  • 第一行(用户名)读入$arr[0]
  • 第二行(密码)读入$arr[1]

您可以回复它以检查阅读内容:

echo "username=${arr[0]}"
echo "password=${arr[1]}"

答案 1 :(得分:0)

cron用sh -c执行,所以:

sh /home/test.sh hostnm101.abc /mypath/dir test `cat /mypath/dir/foobar_file` `cat /mypath/dir/F008AR_file` >> /logs/mytst.log 2>&