La gestion des erreurs dans bash/script expect
Collé ci-dessous est un script bash, combinée à attendre code, dont:
- se connecte à un hôte distant via ssh, recueille les dossiers et préparer tgz fichier;
- copie tgz fichier à partir de l'hôte distant sur la machine locale;
- se connecte à un hôte distant via ssh et retirer précédemment créé tgz fichier;
- enfin, l'extrait de tgz fichier sur l'ordinateur local.
Tout fonctionne, si elle est adoptée arguments sont valides (c'est à dire, $host
, $user
, et $pass
). Si l'un d'eux est incorrect, le script se bloque. Je me demande comment faire pour inclure une gestion d'erreur (par exemple, en $cmd1) à la fin de script avec le message si l'utilisateur (ou le mot de passe) est incorrect?
Merci d'avance pour tous les pointeurs.
#!/bin/bash
prog=$(basename $0)
NO_ARGS=0
E_OPTERROR=85
# Script invoked with no command-line args?
if [ $# -eq "$NO_ARGS" ]; then
echo "Usage: $prog [-h host] [-u username] [-p password]"
echo " $prog -help for help."
exit $E_OPTERROR
fi
showhelp() {
echo "Usage: $prog [-h host] [-u username] [-p password]"
echo " -h: host"
echo " -u: username"
echo " -p: password"
echo " -help: this help message"
exit 2
}
user=""
host=""
pass=""
now=$(date +"%m-%d-%Y")
dir="data_$now"
file="data.tgz"
while getopts "h:u:p:help" name; do
case $name in
h)
host=$OPTARG
;;
u)
user=$OPTARG
;;
p)
pass=$OPTARG
;;
help)
showhelp $0
;;
esac
done
if [ -d "$dir" ]; then
rm -R $dir
mkdir $dir
else
mkdir $dir
fi
cmd1=$(expect << EOF
spawn ssh $user@$host
expect "password: "
send "$pass\n"
expect "$ "
send "cd /tmp\n"
expect "$ "
send "tar -czf $file \`find . -maxdepth 1 -name 'f2p_*' -print\`\n"
expect "$ "
send "logout"
EOF)
cmd2=$(expect << EOF
spawn scp $user@$host:/tmp/$file $dir
expect "password: "
send "$pass\n"
expect "$ "
EOF)
CMD3=$(expect << EOF
spawn ssh $user@$host
expect "password: "
send "$pass\n"
expect "$ "
send "cd /tmp\n"
expect "$ "
send "rm $file\n"
expect "$ "
send "logout"
EOF)
echo "$cmd1"
echo "$cmd2"
echo "$cmd3"
cd $dir
tar -xzf $file
rm $file
count=$(ls -1 | wc -l | awk '{gsub(/^ +| +$/, "")}1')
cd ..
#clear
echo "All done. Extracted $count *.net files."
- orthographe corrigée. Merci pour les commentaires.
Vous devez vous connecter pour publier un commentaire.
La
expect
commande peut effectuer différentes actions basées sur des réponses différentes.Par exemple, vous pouvez définir $cmd1 comme ceci:
Si le mot de passe fourni ne fonctionne pas, ce script sera sortie et imprimer le message "mot de passe Incorrect".
Pour une utilisation avancée, veuillez jeter un oeil à la page de man. Il y a quelques bons exemples et de nombreuses autres options.
Ici quand on enlève la commande de sortie, attendez-vous devez imprimer "mot de passe Incorrect" et que la prochaine partie, par l'envoi de "cd /tmp\n".......
est-ce que?