2016-10-24 7 views
-1

UNIXサーバーにユーザーを作成するためのexpectスクリプトを作成しました。これは、基本的にはuseraddコマンドとなどを行うにはrootに私の資格とsuコマンドを使用してサーバにSSH経由で接続している(私は理解してそこに同じことを達成するために他の方法があるが、私は現在、このような設定や環境に制限されています。)作成前にユーザーが存在する場合は、スクリプトが必要です

​​

しかし、ユーザーが既にシステムに存在しているかどうかを確認するためにロジックを追加することができない場合は、それがbashであれば、返された番号を確認するためにgrep -c '^USER' /etc/passwdを追加したでしょう。しかし、私は期待からの戻り値を取り込むことができません。一度戻ったので、多くの情報があり、私はコメントを追加しました:

send "egrep -c '^$user' /etc/passwd \r" 
set output $expect_out(buffer) 

は、誰かがどのようにすべての出力を解析する方法を教えてもらえますか?私はそれが非常に簡単な作業であることを知っています。それはおそらく単純な場合は... then .. ..しかし、私は過去1週間に有用な何かを生成することができません。リモートホスト上でシェルを想定し

答えて

0

はSH-ベースで、リモートシステムは、Linuxです:

set cmd [format {getent passwd %s >/dev/null 2>&1; [ "$?" -eq 2 ] && /usr/sbin/useradd -d /export/home/%s -m -s /bin/sh %s} $user $user $user] 
send "$cmd\r" 

私が引用容易にするために(他の言語でsprintfとして知られている)formatを使用しています。

+0

ありがとうございました。私が持っているリモートホストはSolaris上にあります。しかし、私は解決策を思いつくことができました。 – Ben

0

これまで数時間かけてtclを勉強していたのですが、これで今すぐ動作します。

私はroot_passを入力した後、このコードブロックを置き換えます。

send "\r" 
    expect -re $prompt 
    expect *; 
    send "egrep -c '^$user:' /etc/passwd \r" 
    expect -re $prompt 
    set output $expect_out(buffer); 
    set ans [ split $output \n ] 
    set var [lindex $ans 1] 
    if { $var >= 1 } { 
     puts "Found.\r" 
     send "exit\r" 
     expect eof 
    } else { 
     puts "Not found.\r" 
     send "/usr/sbin/useradd -d /export/home/$user -m -s /bin/sh $user \r" 
     ..... 
    } 
関連する問題