2017-09-28 3 views
1

J'ai un script shell UNIX où je passe des valeurs sous la forme de paramètres. Tout semble fonctionner correctement, mais pas pour un paramètre, mais je peux le voir imprimé avec la commande echo.La variable de paramètre n'est pas ajoutée

Script-:

#!/bin/bash 

admPath=$1 
admdatatype=$2 
admeaimethod=$3 
admprefix=$4 
gatewayname=$5 
enterpriseName=$6 
userId=$7 
password=$8 
admFilter=$9 

echo "$admPath" 
echo "$admdatatype" 
echo "$admeaimethod" 
echo "$admprefix" 
echo "$gatewayname" 
echo "$enterpriseName" 
echo "$userId" 
echo "$password" 
echo "$admFilter" 


srvrmgr -g "$gatewayname" -e "$enterpriseName" -s gepfdevss -u "$userId" -p "$password" -c "run task for comp ADMBatchProc with admpath="$admPath", admdatatype="$admdatatype", admfilter="'$admFilter'", admeaimethod=$admeaimethod, admprefix="$admprefix"" -b >> exportLOVStatus.out 

Comme vous pouvez le voir j'ai un paramètre appelé admFilter dont la valeur que je veux passer comme '[List Of Values Parent (UDA).Value]=\"XRX_TEST\"'.

Quand j'exécute ci-dessus script que je peux voir écho résultat comme ci-dessous -:

exécution -:

./exportLOV.sh "/global/u70/globepfdev/ADM" "LOV" "Upsert" "export_ADM" "gateway" "enterpriseserver" "user" "password" \''[List Of Values Parent (UDA).Value]=\"XRX_TEST\"'\' 

résultat Echo -:

/global/u70/globepfdev/ADM 
LOV 
Upsert 
export_ADM 
gateway 
enterprise 
user 
password 
'[List Of Values Parent (UDA).Value]=\"XRX_TEST\"' 

Mais comme La commande est exécutée pour le Gestionnaire de serveur après une connexion réussie. Ce paramètre admFilter ne lit pas la valeur. Ceci est la sortie pour la commande run task -:

run task for comp ADMBatchProc with admpath=/global/u70/globepfdev/ADM, admdatatype=LOV, admfilter=$admFilter, admeaimethod=Upsert, admprefix=export_ADM 

Vous pouvez voir tous les autres paramètres ont une valeur qui lui est associée à part admFilter. Je suis coincé à cause de cela quelqu'un peut-il m'aider. Comment puis-je passer la valeur correctement ?? Merci

+0

Je ne vois pas comment cela pourrait être. C'est le résultat que vous obtiendriez si vous aviez écrit: 'admfilter =" '$ admfilter' ",' – Barmar

+0

@Barmar vous avez raison j'ai corrigé. –

Répondre

3

Les guillemets simples empêchent l'extension des variables. Vous devriez placer les guillemets simples à l'intérieur de la chaîne entre guillemets doubles, afin qu'ils soient envoyés littéralement à la commande srvrmgr, pas à l'extérieur.

Il n'est également pas nécessaire de terminer les guillemets autour de chaque variable dans l'argument -c.

srvrmgr -g "$gatewayname" -e "$enterpriseName" -s gepfdevss -u "$userId" -p "$password" -c "run task for comp ADMBatchProc with admpath=$admPath, admdatatype=$admdatatype, admfilter='$admFilter', admeaimethod=$admeaimethod, admprefix=$admprefix" -b >> exportLOVStatus.out 

Voir Difference between single and double quotes in Bash