Concat 2 variables et utiliser cette variable pour obtenir de la valeur à partir du fichier de propriétés à l’aide d’un script shell

J’ai un fichier de propriétés avec les propriétés ci-dessous,

apache_ip=127.0.0.1 apache_user=root 

Maintenant, dans mon script shell, j’ai fait quelque chose comme ci-dessous,

 source $1 service=$2 #$2=apache variable=${service}_ip serviceIP=${variable} echo ${serviceIP} 

Je veux obtenir la sortie comme 127.0.0.1 , mais la sortie était apache_ip

J’ai essayé différentes combinaisons mais ça ne marche pas. Comment concaturer deux variables et utiliser cette variable pour obtenir la valeur du fichier de propriétés.

Vous cherchez cela? Je suppose que vous utilisez bash.

 service="apache" apache_ip="127.0.0.1" variable="${service}_ip" ip="${!variable}" echo "$ip" 

qui imprime 127.0.0.1.

Regardez ici pour plus d’informations sur l’extension du paramètre shell dans le shell bash.

Si le premier caractère du paramètre est un point d’exclamation (!) Et que le paramètre n’est pas un nameref, il introduit un niveau d’indirection de variable. Bash utilise la valeur de la variable formée à partir du rest du paramètre en tant que nom de la variable. cette variable est ensuite développée et cette valeur est utilisée dans le rest de la substitution, plutôt que la valeur du paramètre lui-même. C’est ce qu’on appelle l’expansion indirecte. Si paramètre est un nameref, le nom de la variable référencée par paramètre est étendu au lieu d’effectuer l’extension indirecte complète.

Lorsque vous souhaitez obtenir les valeurs du fichier de configuration, vous pouvez utiliser grep :

 configfile=$1 service=$2 serviceIP=$(grep "^${service}_ip=" configfile|cut -d= -f2-) echo "serviceIP=${serviceIP}" 

Vous pouvez faire la même chose lorsque le fichier de configuration a été généré:

 serviceIP=$(set | grep "^${service}_ip=" |cut -d= -f2-) echo "serviceIP=${serviceIP}"