Shell 自動(dòng)交互教程
@(TeachOfShell)
- 實(shí)現(xiàn)了:目前實(shí)現(xiàn)了shell文件上傳以及基于docker的springboot項(xiàng)目自動(dòng)部署证芭,以及云服務(wù)器的自動(dòng)登錄
1. scp上傳文件并在服務(wù)器端執(zhí)行腳本
注意:
- scp上傳文件若在${host}:后面沒(méi)有指定路徑直接加文件名,默認(rèn)傳在root文件夾下担映,所以加上文件名可以傳到指定的文件夾下
2.ssh user@host -t "cmd1;cmd2 /bin/bash" 表示在服務(wù)器上執(zhí)行腳本cmd1和cmd2
#!/usr/bin/expect -f
#!/bin/bash
set timeout -1
set projectname [lindex $argv 0]
spawn scp /Users/guimu/IdeaProjects/${projectname}/target/${projectname}-0.0.1-SNAPSHOT.jar ${user}@${host}:/guimu/bootfile/${projectname}-0.0.1-SNAPSHOT.jar
expect "*password*"
set pass "daguimu@123"
send "${pass}\r"
spawn ssh ${user}@${host} -t "cd /guimu/bootfile ; docker build -t mimi .; /bin/bash"
expect "*password*"
send "${pass}\r"
2. 云服務(wù)器登陸腳本
注意:
- 后面接的-t參數(shù)废士,表示登陸之后執(zhí)行的命令,再此配合cd命令蝇完,實(shí)現(xiàn)了登陸后到指定目錄
- interact表示停留在終端官硝,移交控制權(quán)矗蕊,若不加會(huì)退出終端
#!/usr/bin/expect -f
#!/bin/bash
set timeout 3
spawn ssh ${user}@${host} -t "cd /guimu/bootfile ; /bin/bash"
expect "*password*"
send "${password}\r"
send "sudo -s\r"
interact
3. 云服務(wù)器通過(guò)expect腳本進(jìn)入redis或者mysql
注意:
寫在該處主要是記錄字符串比較以及if條件判斷,這個(gè)和shell bash大不相同氢架,弄了很久傻咖,記錄一下
示例如下:
#!/usr/bin/expect -f
set app [lindex $argv 0]
set redis "redis"
set mysql "mysql"
if { [string compare $app $redis] == 0 } {
spawn docker exec -it 47 bash
expect "root@472102c2852a:/data#"
send "redis-cli\r"
}
if { [string compare $app $mysql] == 0 } {
spawn docker exec -it 6f bash
expect "root@6f9a7833c494:/#"
send "mysql -uroot -p\r"
expect "*password*"
send "123456\r"
expect "mysql>"
send "show databases;\r"
}
interact