tft每日頭條

 > 科技

 > shell編程基本知識

shell編程基本知識

科技 更新时间:2024-07-19 15:13:04

shell編程基本知識?[root@qfedu ~] yum -y install expect是一個免費的編程工具, 用來實現自動的交互式任務, 而無需人為幹預. 說白了 expect 就是一套用來實現自動交互功能的軟件,我來為大家講解一下關于shell編程基本知識?跟着小編一起來看一看吧!

shell編程基本知識(shell編程-Expect)1

shell編程基本知識

No.1 expect的安裝

[root@qfedu ~] yum -y install expect

No.2 expect的語法-------通過expect可以實現将交互式的命令變為非交互式執行,不需要人為幹預(手動輸入)

是一個免費的編程工具, 用來實現自動的交互式任務, 而無需人為幹預. 說白了 expect 就是一套用來實現自動交互功能的軟件

在實際工作中我們運行命令、腳本或程序時, 都需要從終端輸入某些繼續運行的指令,而這些輸 入都需要人為的手工進行. 而利用 expect 則可以根據程序的提示, 模拟标準輸入提供給程序, 從而實現自動化交互執 行. 這就是 expect

如果能夠在工作中熟練的使用shell腳本就可以很大程度的提高工作效率, 那麼再搭配上expect這個時候很多工作都可以實現自動化進行。

用法: 1)定義expect腳本執行的shell #!/usr/bin/expect -----類似于#!/bin/bash 2)set timeout 30 設置超時時間30s 3)spawn spawn是執行expect之後後執行的内部命令開啟一個會話 #功能:用來執行shell的交互命令 4)expect ---相當于捕捉 功能:判斷輸出結果是否包含某項字符串(相當于捕捉返回的結果),沒有則會斷開,否則等待一段時間後返回,等待通過timeout設置 5)send 執行交互動作,将交互要執行的命令進行發送給交互指令,命令字符串結尾要加上“\r”,#---相當于回車 6)interract 執行完後保持交互狀态,需要等待手動退出交互狀态,如果不加這一項,交互完成會自動退出 7)exp_continue 繼續執行接下來的操作

實戰非交互式ssh連接:

案例1:普通操作 [root@qfedu script]# vim expect01.sh #!/usr/bin/expect spawn ssh root@192.168.246.115 expect { "yes/no" { send "yes\r"; exp_continue } "password:" { send "1\r" }; } interact [root@qfedu script]# chmod x expect01.sh [root@qfedu script]# ./expect01.sh spawn ssh root@192.168.246.115 root@192.168.246.115's password: Last login: Fri Aug 28 16:57:09 2019 #如果添加interact參數将會等待我們手動交互進行退出。如果不加interact參數在登錄成功之後會立刻退出。 ============================================================================ 2.設置變量與進行傳參的方式 #注意:expect環境中設置變量用set,識别不了bash方式定義的變量 [root@qfedu script]# vim expect01.sh #!/usr/bin/expect set user root set pass 1 set ip [ lindex $argv 0 ] #expect固定寫法,從0開始,第一個位置參數,相當于shell中的$1 set timeout 10 spawn ssh $user@$ip expect { "yes/no" { send "yes\r"; exp_continue } "password:" { send "$pass\r" }; } interact [root@qfedu script]# ./expect01.sh 192.168.246.115 spawn ssh root@192.168.246.115 root@192.168.246.115's password: Last login: Fri Aug 28 07:13:57 2019 from 192.168.246.135 #如果想登錄成功自動結束交互模式也就是expect,可以采用下面方式: expect "#" send "useradd test\r" send "pwd\r" send "exit\r" expect eof #直接退出expect模式 ============================================================================ 3.進行批量推送公鑰實現免密連接,ping通一個ip地址連接一個ip------!!!!擴展 [root@qfedu script]# vim getip_push.sh #!/usr/bin/bash pass=1 #判斷expect命令是否安裝 rpm -qa expect &> /dev/null if [ $? -ne 0 ];then yum install -y expect fi #判斷主機下面是否生成秘鑰,如果沒有生成秘鑰 if [ ! -f ~/.ssh/id_rsa ];then ssh-keygen -P "" -f ~/.ssh/id_rsa fi #循環執行獲取up狀态的ip地址。 for i in {2..254} do { ip=192.168.198.$i ping -c1 $ip &> /dev/null if [ $? -eq 0 ];then echo "$ip" >> up_ip.txt set timeout 10 /usr/bin/expect <<-EOF #shell腳本中調用expect命令 spawn ssh-copy-id $ip expect { "yes/no" { send "yes\r"; exp_continue } "password:" { send "$pass\r" }; } expect eof EOF fi } & wait done echo "finish..." [root@qfedu script]# chmod x getip_push.sh [root@qfedu script]# ./getip_push.sh 測試....

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved