2 votes

Shell sript pour lire le fichier source et utiliser la clé dans le Shell.

#!/bin/bash
source /data/output/QAScripts/conf.ini
var=$($1path)
echo $var

conf.ini est le fichier de configuration qui a LSTpath=/data/bb/loader

Je reçois l'erreur suivante. Où est-ce que je me trompe ?

./file LST
 line 8: LSTpath: command not found

3voto

sourav c. Points 40637

Vous pouvez le résoudre en utilisant eval .

eval - construct command by concatenating arguments

Modifiez votre script comme suit :

#!/bin/bash
source /data/output/QAScripts/conf.ini
eval var='$'"$1"path
echo $var

puis exécutez-le comme ceci :

$ ./foo LST
/data/bb/loader

où,

$ cat /data/output/QAScripts/conf.ini
LSTpath=/data/bb/loader

1voto

A.B. Points 84870

Utilisation de awk Je n'aime pas. eval ;)

Votre var=$($1path) exécute le premier paramètre de votre script ( $1 ) concaténée avec path comme une commande. D'où l'erreur.

Votre nouveau script

#!/bin/bash
var=$(awk -F= '/^'"$1"'path/ {print $2}' /data/output/QAScripts/conf.ini)
echo "$var"

Votre /data/output/QAScripts/conf.ini

LSTpath=/data/bb/loader

Exemple

$ ./foo LST
/data/bb/loader

0voto

ChethanSuresh Points 21

Utilisation de grep , eval :(

En supposant que source est utilisé pour charger les variables pour obtenir le chemin à partir de conf.ini

script.sh

#!/bin/bash
var=\`grep $1 /data/output/QAScripts/conf.ini | grep -oP '\[^'$1'path\\=\](.\*)'\`
echo $var

conf.ini

LSTpath=/data/bb/loader
#following added to demonstrate
LSApath=/data/bb/A
LSBpath=/data/bb/B
LSCpath=/data/bb/C

Sortie : Affiche selon arg var

root@controller:~# ./script.sh LST
/data/bb/loader
root@controller:~# ./script.sh LSA
/data/bb/A
root@controller:~# ./script.sh LSB
/data/bb/B
root@controller:~# ./script.sh LSC
/data/bb/C
root@controller:~#

Merci :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X