天天看点

expect实现多台主机执行同样操作

      下月有一个系统上线23台主机,虚拟机模板不带应用用户,所以只能手动来一个一个建立,于是想到了写一个小脚本解脱重复劳动的痛苦。

整个脚本分为脚本和配置文件:

配置文件如下:

1

2

3

4

5

<code>username=root</code>

<code>password=1q2w3e</code>

<code>ip1=192.168.10.129</code>

<code>ip2=192.168.10.130</code>

<code>ip3=192.168.10.128</code>

脚本文件如下:

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<code>UNAME=`</code><code>cat</code> <code>.</code><code>/sysinfo</code><code>.conf| </code><code>grep</code> <code>username|</code><code>awk</code> <code>-F </code><code>'='</code> <code>'{print $2}'</code><code>`</code>

<code>PASSWD=`</code><code>cat</code> <code>.</code><code>/sysinfo</code><code>.conf| </code><code>grep</code> <code>password|</code><code>awk</code> <code>-F </code><code>'='</code> <code>'{print $2}'</code><code>`</code>

<code>cat</code> <code>.</code><code>/sysinfo</code><code>.conf|</code><code>grep</code> <code>ip|</code><code>awk</code> <code>-F </code><code>'='</code> <code>'{print $2}'</code> <code>| </code><code>while</code> <code>read</code> <code>IP </code>

<code>do</code>

<code>ping</code> <code>-c 2 $IP &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>conn_check=$?</code>

<code>if</code> <code>[ $conn_check -</code><code>eq</code> <code>0 ]; </code><code>then</code>

<code>expect &lt;&lt; EOF</code>

<code>spawn </code><code>ssh</code>  <code>$UNAME@$IP</code>

<code>expect </code><code>"*password:"</code> <code>{ send </code><code>"$PASSWD\r"</code> <code>}</code>

<code>expect  </code><code>"*]#"</code> <code>{ send </code><code>"lvcreate -L 500M -n lv_test system\r"</code> <code>}</code>

<code>expect  </code><code>"*]#"</code> <code>{ send </code><code>"mkdir /test\r"</code> <code>}</code>

<code>expect  </code><code>"*]#"</code> <code>{ send </code><code>"mkfs.ext4 /dev/system/lv_test\r"</code> <code>}</code>

<code>expect  </code><code>"*]#"</code> <code>{ send </code><code>"mount /dev/system/lv_test /test\r"</code> <code>}</code>

<code>expect  </code><code>"*]#"</code> <code>{ send </code><code>"exit\r"</code> <code>}</code>

<code>EOF</code>

<code>elif</code> <code>[ -s .</code><code>/error</code><code>.log ]; </code><code>then</code>

<code>echo</code> <code>"`date`  The hostmachine $IP is not connected!"</code><code>&gt;&gt;.</code><code>/error</code><code>.log</code>

<code>else</code>

<code>echo</code> <code>"`date`  The hostmachine $IP is not connected!"</code><code>&gt;.</code><code>/error</code><code>.log</code>

<code>fi</code>

<code>done</code>

备注:里面的IP为案例IP并非我主机实际IP

本文转自 yuri_cto 51CTO博客,原文链接:http://blog.51cto.com/laobaiv1/1978665,如需转载请自行联系原作者

继续阅读