bash – comment passer des valeurs d’arg à un script shell dans un cronjob

J’ai entrée cron qui ressemble à ceci qui fonctionne: (en passant dans 5 entrées)

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

Je veux le changer afin de stocker les entrées (4,5) foobar et F008AR dans un fichier séparé et de les lire par 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 

Y at-il un moyen facile de faire cela dans le cron pour ces (2) valeurs d’entrée? Merci.

Bien essayer de cette façon.

1) Créez un fichier séparé /mypath/dir/login.info avec un contenu comme celui-ci (nom d’utilisateur / mot de passe sur des lignes séparées):

 foobar F008AR 

2) Modifiez votre test.sh comme ceci:

 #!/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) Avoir votre commande cron comme ceci:

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

Résumé

  • IFS signifie Internal Field Separator (IFS) dans bash

Je l'utilise comme ceci:

 IFS=" " 

Ce qui signifie que le nouveau caractère de ligne doit être utilisé comme séparateur de champs (puisque nous stockons le nom d'utilisateur et le mot de passe sur deux lignes distinctes). Et puis cette ligne pour lire le fichier /mypath/dir/login.info dans un tableau:

 arr=( $(<$2/$4) ) 
  • La première ligne (nom d'utilisateur) est lue dans $arr[0]
  • La seconde ligne (mot de passe) est lue dans $arr[1]

Vous pouvez lui faire écho pour vérifier le contenu lu:

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

cron s’exécute avec sh -c donc:

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