2013-02-28 8 views
4

Ceci est l'extrait de code que je utilise dans le script bash following:comment utiliser s'attendre à l'intérieur d'un script bash

for user_input in `awk '{print}' testfile_$$.txt` 
    do 
    ipaddress=`echo $user_input | cut -d';' -f 1` 
    command="${config_mode}`echo $user_input | cut -d';' -f 2-`" 
      ping -w 1 $ipaddress 1> /dev/null 2> $ERR_LOG_FILE 1> $LOG_FILE 
    if [ $? -eq 0 ];then 
      ssh "[email protected]$ipaddress" "$command" 
                >> $LOG_FILE 


    fi 
    done 

Comment puis-je utiliser attends pour automatiser la connexion ssh dans ce script.

Je suis très nouveau pour attendre et a commencé à tester ce (il a échoué):

#!/usr/bin/bash 


set force_conservative 0 ;# set to 1 to force conservative mode even if 
          ;# script wasn't run conservatively originally 
if {$force_conservative} { 
     set send_slow {1 .1} 
     proc send {ignore arg} { 
       sleep .1 
       exp_send -s -- $arg 
     } 
} 

# 

set timeout -1 
spawn ssh [email protected] {uname -a; df -h} 
match_max 100000 
expect "*?assword: " 
send -- "bar01\r" 
expect eof 

dois-je écrire le tout recommencer script bash en expect script ou il attendre peut être utilisé à l'intérieur script bash si elle peut se faire:

plus sur i besoin d'obtenir la variable bash $ commande, $ username, mot de passe $, $ ipaddress et l'utiliser dans la partie attendue

quelle solution proposeriez-vous? ou puis-je créer un attendre scénario et l'appeler à partir du script bash juste pour la connexion, la gestion des erreurs, l'exécution, LOGFILES

Répondre

7

bien vous devrez exécuter deux scripts séparés un script shell qui appelle un script expect

#!/usr/bin/bash 


set force_conservative 0 ; 

changement ci-dessus pour

#!/usr/bin/expect 


set force_conservative 0 ; 

ou bien dans votre script shell Je ne suis pas sûr sur le format, mais vous pouvez envoyer expect -c avec commande à exécuter:

expect -c "send \"hello\n\"" -c "expect \"#\"" 
expect -c "send \"hello\n\"; expect \"#\"" 

En fait, il y a aussi une autre alternative

#!/bin/bash 

echo "shell script" 

/usr/bin/expect<<EOF 

set force_conservative 0 ;# set to 1 to force conservative mode even if 
          ;# script wasn't run conservatively originally 
if {$force_conservative} { 
     set send_slow {1 .1} 
     proc send {ignore arg} { 
       sleep .1 
       exp_send -s -- $arg 
     } 
} 

# 

set timeout -1 
spawn ssh [email protected] {uname -a; df -h} 
match_max 100000 
expect "*?assword: " 
send -- "bar01\r" 
expect eof 
EOF 
+0

merci pour l'alternative, mais ce qui peut faire pour obtenir le nom d'utilisateur variables bash, ipaddress et command9 (uname -a; df -h) dans l'attente est là de toute façon – munish

+0

bien que vous pourriez exporter la variable et puis se référer à elle comme une variable d'environnement .... donc exporter VARIABLE1 = quelque chose alors de s'attendre à partie essayer de l'appeler – Vahid

+1

export MYVAR = "abc123 " /usr/bin/s'attendre << EOF set myvar =" $ env (MYVAR) " envoyer" echo $ myvar \ r " EOF – Vahid