常用的幾種腳本文件有:except腳本 bash腳本 python腳本 (解釋性語言,無需編譯,即可運行)
#!/usr/bin/except
except腳本,Expect是一個免費的編程工具語言,用來實現自動和交互式任務進行通信,而無需人的干預。
#! /bin/bash
通過/usr/bin/bash運行程序,其指定了程序的具體位置,在某些情況下更安全,因為它限制了代碼注入的可能。
#! /usr/bin/env bash
通過/usr/bin/env運行程序,用戶不需要去尋找程序在系統中的位置(因為在不同的系統,命令或程序存放的位置可能不同),程序的位置存放在$PATH中;
python腳本文件
bash語法:
rsync: 用於從一個位置到另外一個位置同步文件和文件夾。備份的地址可以是本地也可以是遠程 rsync -av --exclude=[...] [.....] [.....]
sed: 逐行讀取文件的內容,讀到就執行相應的操作(主要用於替換文件中的字符串)
echo: 輸出字符串
find: 查找文件 find 目錄 -name "文件名"
grep: 以行為單位讀取文本並使用正則表達式進行匹配,匹配成功后打印出該行文本 grep [option] "string_to_find" filename
grep常見選項:
(1)-i:忽略搜索字符串的大小寫
(2)-v:取反,即輸出不匹配的那些文本行
(3)-n:輸出行號
(4)-l:輸出能夠匹配模式的文件名,相反的選項為-L
(5)-q:靜默輸出
(6)-c:計算匹配成功的行數
(7)-o:輸出匹配到的文本部分的個數
(8)-e:該選項加上正則表達式就是一個需要匹配的模式
(9)-r:grep的參數filename為目錄時可以加上本選項表示遞歸搜索
(10)--include:指定需要搜索的文件
(11)--exclude:排除需要搜索的文件
(12)--exclude-dir:排除需要搜索的目錄
shell中的特殊字符:
- $ 美元符號。用來表示變量的值。如變量NAME的值為Mike,則使用$NAME就可以得到“Mike”這個值。
- # 井號。除了做為超級用戶的提示符之外,還可以在腳本中做為注釋的開頭字母,每一行語句中,從#號開始的部分就不執行了。
- “” 雙引號。shell不會將一對雙引號之間的文本中的大多數特殊字符進行解釋,如#不再是注釋的開頭,它只表示一個井號“#”。但$仍然保持特殊含義。(在雙引號中的$加變量名,即:$PARAM_NAME,依然會轉換成變量的值。),雙引號對於某些特殊符號是不起作用的, 例如:”,$,\,`(反引號)。雙引號和單引號不能嵌套。即:echo ‘””’ 輸出””, echo “’’” 輸出’’
- ‘’ 單引號。shell不會將一對單引號之間的任何字符做特殊解釋。(在雙引號中的$加變量名,即:$PARAM_NAME,不會轉換成變量的值。)
- `` 倒引號。命令替換。在倒引號內部的shell命令首先被執行,其結果輸出代替用倒引號括起來的文本,不過特殊字符會被shell解釋。
- \ 斜杠。用來去掉在shell解釋中字符的特殊含義。在文本中,跟在\后面的一個字符不會被shell特殊解釋,但其余的不受影響。
- []中括號, 主要是用來測試條件的,通常放在if語句的后面。 中括號本身不會在測試語句執行后消失。
-
{}大括號,主要是和$符號配合,作為字符串連接來使用。echo ${HOME}ismydir (結果:/home/xiongguoanismydir)
except語法:
set: 設置參數值 set timeout 30
spwan: 是進入expect環境后才可以執行的expect內部命令,使用前必須要裝except。
它主要的功能是給ssh運行進程加個殼,用來傳遞交互指令。 spawn ssh -l username 192.168.1.1
except: 是expect的內部命令,用來判斷上次輸出結果里是否包含“password:”的字符串,如果有則立即返回,否則就等待一段時間后返回,這里等待時長就是前面設置的30秒 expect "password:"
send: 執行交互動作,與手工輸入密碼的動作等效 send "ispass\r"
interact: 執行完成后保持交互狀態,把控制權交給控制台,這個時候就可以手工操作了
$argv: 參數數組,expect腳本可以接受從bash傳遞過來的參數.可以使用[lindex $argv n]獲得,n從0開始,分別表示第一個,第二個,第三個....參數
參考網址:https://www.cnblogs.com/chengjian-physique/p/11768641.html