linux expect 案例

1、linux expect命令,它類似於shell、window中的cmd。本身就是命令
2、如果沒有需要安裝
yum info expect
yum -y install expect
如果不行使用源碼安裝吧
3、man expect
案例1:
[root@hadoop01 ~]# expect -c 'expect "\n" {send "pressed enter\n"}'   交互式的,按回車鍵就會輸出pressed enter,並換行


案例2:
vi ./myexpect.sh
內容如下(實現自動登錄):
#!/usr/bin/expect

set timeout 30
spawn ssh -l root 192.168.216.112   root爲登錄用戶,spawn 代表運行命令;ssh -l代表登錄用戶
expect "password:"   等待出現password
send "root\r"        root爲登錄密碼
interact 用戶停留在遠程服務器上


案例2的兩種執行方式:
expect ./myexpect.sh
授予腳本執行權限:
./myexpect.sh

案例3: 實現自動安裝jdk,使用nginx服務器作爲源
vi /root/auto.sh
內容如下:

#!/bin/bash
SERVERS="192.168.216.111 192.168.216.112" #這是我需要安裝軟件的兩臺機器的ip
PASSWORD=root  #這是主機的密碼,建議各主機密碼設成一樣的
BASE_SERVER=192.168.216.111  #這是我主機的IP
 
auto_ssh_copy_id() {
    expect -c "set timeout -1;
        spawn ssh-copy-id $1;
        expect {
            *(yes/no)* {send yes\r;exp_continue;}
            *password:* {send $2\r;exp_continue;}
            eof        {exit 0;}
        }";
}
 
ssh_copy_id_to_all() {
    for SERVER in $SERVERS
    do
        auto_ssh_copy_id $SERVER $PASSWORD
    done
}
 
ssh_copy_id_to_all
 
 
for SERVER in $SERVERS
do
    scp install.sh root@$SERVER:/root
    ssh root@$SERVER /root/install.sh
done


vi /root/install.sh
內容如下:

#!/bin/bash
BASE_SERVER=192.168.216.111
wget $BASE_SERVER/soft/jdk-8u152-linux-x64.tar.gz
tar -zxvf jdk-8u152-linux-x64.tar.gz -C /usr/local
cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk1.8.0_152/

export PATH=$PATH:$JAVA_HOME/bin:
EOF

執行測試
授予兩個文件可執行權限
chmod +x install.sh boot.sh
運行第一個腳本即可
./boot.sh

案例4、配置好hadoop,然後遠程scp發送到每一個節點:

代碼自己寫....

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章