shell script 是個(gè)很重要的東西,下面就以一個(gè)例子介紹下.
# showname.sh
# 一定要指明你所使用的shell,因?yàn)椴煌膕hell是有差別的
#! /bin/bash
# 這里寫(xiě)一些和腳本相關(guān)的注釋,例如功能,創(chuàng)建時(shí)間,作者.
# 告知主要環(huán)境變量的位置以便使用
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "input your first name: " firstname
read -p "input your last name: " lastname
echo -e "\n Your name is : ${firstname} ${lastname}"
實(shí)戰(zhàn): 自動(dòng)登陸遠(yuǎn)程服務(wù)器腳本
有臺(tái)服務(wù)器,沒(méi)有做密匙驗(yàn)證,每次登陸服務(wù)器都要輸入密碼,很麻煩,想使用shell script腳本登陸.
準(zhǔn)備工作
- 安裝expect(本地,root權(quán)限下),
apt-get install expect
或者
yum install expect
編寫(xiě)腳本(user模式)
remote.sh
# 導(dǎo)入expect,以便使用spawn expect等命令
#! /usr/bin/expect
# 設(shè)置超時(shí)限制
set timeout 300
# 1
spawn ssh [-p 端口號(hào)] root@你的服務(wù)器地址
# 2
expect "*password:"
# 3
send "password\r"
# 4
interact
編寫(xiě)結(jié)束之后(root權(quán)限下)
chmod u+x remote.sh
給它執(zhí)行權(quán)限
下面講解一下
- 只有使用spawn啟動(dòng)的進(jìn)程才能被expect和send等命令捕捉到,這里用spawn啟動(dòng)ssh進(jìn)程來(lái)進(jìn)行后面的交互
- expect用來(lái)接收進(jìn)程的反饋,即expect想要得要一個(gè)以"password:"結(jié)尾的字符串,滿足條件后才會(huì)進(jìn)行下一步.我們知道,當(dāng)我們使用ssh登陸到服務(wù)器,,會(huì)提示我們輸入密碼,而expect就是用來(lái)判斷這個(gè)提示字符串的.
- 當(dāng)接收到輸入密碼提示后,發(fā)送密碼.
\r
用來(lái)結(jié)束輸入 - 允許用戶進(jìn)行交互,如果不加它,連接成功后會(huì)立刻關(guān)閉.我的理解是這樣的,如果不加interact,
3
運(yùn)行結(jié)束后腳本結(jié)束,spawn也就結(jié)束了,那由它啟動(dòng)的進(jìn)程ssh也要結(jié)束,加入interact后,就允許用戶進(jìn)行輸入,什么時(shí)候用戶結(jié)束輸入,腳本就真正運(yùn)行到終點(diǎn),結(jié)束.
如果進(jìn)行變量運(yùn)算,請(qǐng)按照這樣的格式
var=$((${var1}+${var2}))
確保外層有兩層
括號(hào)