Comment sortir du script shell si les fichiers manquent dans les deux machines?

machineA mon script shell sur machineA qui copie les fichiers de machineB et machineA sur machineA .

Si le fichier n’est pas dans la machineB , alors il devrait y en avoir dans la machineB . Donc, je vais d’abord essayer de copier à partir de machineB , si ce n’est pas le cas dans la machineB je vais aller à la machineC pour copier les mêmes fichiers. Voici mon script shell par lequel je copie les fichiers et PRIMARY_PARTITION est un tableau qui contient tous les numéros de fichiers –

 for el in "${PRIMARY_PARTITION[@]}" do scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@machineB:/te/data/te_snapshot/20140411/t1_weekly_1680_"$el"_200003_5.data /data01/primary/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@machineC:/te/data/te_snapshot/20140411/t1_weekly_1680_"$el"_200003_5.data /data01/primary/. done 

Maintenant, la question est – Il pourrait y avoir des cas où les fichiers ne sont pas présents dans les deux machines – machineB et machineC alors je voudrais sortir du script shell avec un statut non nul et un message correct avec lequel le fichier manquait –

J’ai donc fait comme ça, j’ai ajouté un autre énoncé de pipe à la fin, mais ce message n’est pas imprimé à l’écran. Et je suis à peu près sûr que ces fichiers qui tentent de copier ne sont pas présents dans ces dossiers sur ces deux machines –

 scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@machineB:/te/data/te_snapshot/20140411/t1_weekly_1680_"$el"_200003_5.data /data01/primary/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@machineC:/te/data/te_snapshot/20140411/t1_weekly_1680_"$el"_200003_5.data /data01/primary/. || echo "File number $el missing on both the machines for primary partition." >&2; exit 1 

Donc, il devrait aller à la dernière instruction de tuyau et l’imprimer sur la console. Droite?

Y a-t-il quelque chose qui ne va pas dans ma dernière déclaration de pipe?

Selon votre solution, cela devrait fonctionner

scp renvoie 0 que s’il réussit. afin que vous puissiez écrire comme ceci:

 scp -q machineB:/path/to/your/file . || scp -q machineC:/path/to/your/file . || echo "Sorry no file found" 

Maintenant, laissez-vous d’abord vérifier le code de retour de chaque commande comme suit

 scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@machineB:/te/data/te_snapshot/20140411/t1_weekly_1680_"$el"_200003_5.data /data01/primary/. if [[ $? -ne 0 ]]; then echo "No file found" exit 1 else echo "oh..file is here!" fi 

Même chose pour la deuxième commande. Dans les deux cas, si vous obtenez une valeur non nulle, votre solution doit fonctionner.