場景:工做中常常會遇到shell腳本寫的鏈接腳本,因此稍微瞭解下。php
1、shelljava
Shell 是一個用C語言編寫的程序,它是用戶使用Linux的橋樑。Shell既是一種命令語言,又是一種程序設計語言。shell
Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶經過這個界面訪問操做系統內核的服務。編程
Shell 編程跟java、php編程同樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就能夠了。bash
Linux的Shell種類衆多,常見的有:編輯器
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- ……
本教程關注的是 Bash,也就是 Bourne Again Shell,因爲易用和免費,Bash在平常工做中被普遍使用。同時,Bash也是大多數Linux系統默認的Shell。工具
在通常狀況下,人們並不區分 Bourne Shell 和 Bourne Again Shell,因此,像 #!/bin/sh,它一樣也能夠改成#!/bin/bash。spa
2、shell腳本中嵌入expect來實現密碼輸入操作系統
expect是一個自動交互功能的工具。expect是開了一個子進程,經過spawn來執行shell腳本,監測到腳本的返回結果,經過expect判斷要進行的交互輸入內容(send)設計
一個簡單的輸入密碼操做
#!/usr/bin/expect
set timeout 100
set password "123456"
spawn sudo rm -rf zzlogic
expect "root123456"
send "$password\n"
interact
說明:
第一行#!/usr/bin/expect表示使用expect的shell交互模式
set是對變量password賦值
set timeout 100:設置超時時間爲100秒,若是要執行的shell命令很長能夠設置超時時間長一些。expect超過超時時間沒有監測到要找的字符串,則不執行,默認timeout爲10秒
spawn在expect下執行shell腳本
expect對經過spawn執行的shell腳本的返回進行判斷,是否包含「」中的字段
send:若是expect監測到了包含的字符串,將輸入send中的內容,\n至關於回車
interact:退出expect返回終端,能夠繼續輸入,不然將一直在expect不能退出到終端