Scripts

Bash腳本基礎

         BASH = GNU Bourne-Again Shell,BASH 是 GNU 組織開發和推廣的一個項目。

         Bash腳本類似批處理,簡單來講就是把許多的指令集合在一起,並提供循環、

         條件、判斷等重要功能,語法簡單實用,用以編寫程序,大大簡化管理員的操

         ,並可以完成圖形工具所無法實現的功能。

 


 

         1. 創建包含bash命令的文本文件。文件的第一行應爲:

         #!/bin/bash

         2. 使文件可執行(使用chmod +x scripts)

         3. 將文件放置在用戶的$PATH的目錄中

         ~/bin – 用於用戶的私有程序

         /usr/local/bin – 本地開發、系統上的其他人使用的腳本

         /usr/local/sbin - 本地開發、由root使用的腳本

         直接運行腳本和使用source命令運行腳本是不同的!

         腳本調試模式:

         #!/bin/bash -x

         # bash -x scripts

 

 

 

##1. 引用和轉義

引用和轉義在shell解析字符串時用於去除字符串中特殊字符或保留詞語的特殊含義。這會導致按字面處理字符串,而不是展開變量或將其部分內容視作具有特殊含義。

 

引用有三種類型:

 

弱引用

將字符串放置在雙引號中,保留字符串中所有字符的文字值,$、`、\和!字符除外。換言之,變量

擴展和命令擴展在雙引號內仍起作用。

echo “can I have a $FRUIT”

echo “The current time is $(date +%r).”

 

強引用

將字符串放置在單引號中,保留字符串中所有字符的文字值,同時禁用所有擴展:

echo “Make $$$ Fast”

rm 'untitled folder'

 

轉義

非引用的\是轉義字符。它保留了下一個字符的文字值。(例如,\$PATH是確切的字符串$PATH,而

不是PATH變量的內容。)

echo Make \$\$\$ Fast\!

ls untitled\ folder

 

 

例:

wKiom1hSi7_xlvqKAADXeJb7Z7o072.png-wh_50

wKioL1hSi7_DrwAKAABYaL8Km5Q708.png-wh_50


 

 

 

##2. Shell變量

shell變量用於爲稍後在腳本中使用的名稱指定值,並且僅限於shell命令行或從中聲明變

量的腳本。

例:

wKiom1hSi9bTjQlsAABdynudnhA198.png-wh_50

 

 

 

 

##3. 算術運算符:

 

算術運算符指的是可以在程序中實現加、減、乘、除等數學運算的運算符。

 

wKioL1hSjAbwTR5xAACCsj3NjXI899.png-wh_50



 

 

 

 

##4. 循環

for循環用於值列表中的相同命令的重複。

循環與計算結合:

 

 wKioL1hSjKzwN_SiAAAzKNQo-qI978.png-wh_50

 

 

 

##5. 退出狀態

Linux命令完成時,將返回退出狀態。成功完成程序時,將返回0的推出狀態。這被bash

當作邏輯True值。非零退出狀態通常表示發生了錯誤,並且被bash當作邏輯False值。

 

例如:grep的退出狀態的含義:

0 – 在指定的文件中找到了模式

1 – 在指定的文件中未找到模式

>1 – 一些其他錯誤(無法打開文件、錯誤的搜索表達式等)

推出狀態的值被存儲在"?"中,可以使用以下命令查看:

# echo $?

 

##6. test條件判斷

test命令可用於評估bash腳本中的表達式。它評估其參數所指定的表達式,如果表達式

true,返回零退出狀態,如果表達式爲false,則返回非零退出狀態。test具有替代語

,使用方括號"[]"將表達式括起來,這樣更易於閱讀。

 

字符串比較運算符:=、!=

例:

 wKiom1hSjLewjZsXAABeaJH_Pns902.png-wh_50

 

 

數字比較運算符:-eq、-ne、-lt、-le、-gt、-ge

例:

wKiom1hSjNTwhVD5AABWv4o18Ek073.png-wh_50

 

 

 

##7. case語句

case語句 :它能夠把變量的內容與多個模板進行匹配,再根據成功匹配的模板去決定應該執行哪

部分代碼。

 

例:

[root@web100 ~]# vim fruit.sh

wKioL1hSjPvAYqtYAAAudizs3fo229.png-wh_50

 

 

##8. if語句

if命令檢查if後面的命令或列表的退出值。如果第一個命令評估爲true/零,則運行then

之後的命令列表,直至任一else。如果第一個命令評估爲false/非零,則運行else與fi之

間的命令列表(反向平寫if,標記if塊的結束)。

例:

製作一個查看文件狀態的腳本:

[root@web100 ~]# vim file.sh

wKioL1hSjROhr7JkAABrZXj8khA615.png-wh_50

 

 

 

##9. expect語句

shell中利用expect實現自動應答腳本。

 

#!/usr/bin/expect

這一行告訴操作系統腳本里的代碼使用那一個shell來執行。

 

set timeout 10

設置後面所有的expect命令的等待響應的超時時間,單位爲秒。

 

spawn talk

spawn是expect的內部命令,作用是給後面的shell指令加個殼,用來傳遞交互指令。

 

expect "who"

判斷上次輸出結果裏是否包含“who”的字符串,如果有則立即返回,否則等待超時時間後返回。

 

send "westos\n"

執行交互動作,相當於手工輸入"westos"。

 

expect eof

作用是在輸出中搜索文件結束符,如果沒有這一行,腳本會立即退出,得不到正確結果。

 

interact

執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。否則退出登錄。

 

$argv 參數數組

expect腳本可以接受從bash傳遞過來的參數.可以使用[lindex $argv n]獲得,n從0開始,分別表示第一個,第二個,第三個....參數。

 

 

例:

[root@web100 ~]# yum install expect -y

[root@web100 ~]# vim answer.exp

wKiom1hSjTqT0pG6AADkN1Z58_E035.png-wh_50

[root@web100 ~]# chmod +x answer.exp

[root@web100 ~]# answer.exp tom 30 java bad

wKioL1hSjVfwRS0qAAErMkTHnbo557.png-wh_50

 

 

##.10 環境變量

shell和腳本使用變量來存儲數據 ,有些變量可以連同它們的內容傳遞給子進程,這些

變量我們稱之爲環境變量。

wKiom1hSjW6zyXsgAAB6YhcwfW0769.png-wh_50

 

使用env命令顯示所有環境變量

使用set命令現實所有本地定義的shell變量

Bash啓動腳本

在用戶登錄的時候,會運行全局變量文件/etc/profile,和用戶自定義變量文件

~/.bash_profile去初始化它們的環境變量。

 

 

 

##11. 使用別名

 

alias命令可以用來自定義屬於自己的系統命令,寫入~/.bashrc 文件永久生效。

查看別名:

 

wKioL1hSjYfBCsINAAB4_IlkKnk387.png-wh_50

 

設置別名:

[root@web100 ~]# alias host='hostname'

[root@web100 ~]# host

web100.westos.com

刪除別名:

[root@web100 ~]# unalias host

 

 

製作一個倒計時10s的計數器的腳本:

[root@web100 ~]# vim 1.time.sh

wKiom1hSjZ7xD3taAAB71P8rtcw015.png-wh_50

 

製作一個倒計時1分10s的計數器的腳本:

[root@web100 ~]# vim 2.time.sh

wKiom1hSjduCNwwoAADfDm0_zMk889.png-wh_50

 

製作一個檢查前10臺主機能否ping通的腳本:

[root@web100 ~]# vim ping.sh

wKiom1hSjenQRkEtAAA_E-BaQI8401.png-wh_50

 

製作一個檢查任意主機能否ping通的腳本:

[root@web100 ~]# vim ping*.sh

wKioL1hSjgCh5VJAAACBzfFwKG0052.png-wh_50

 

製作一個備份數據庫的腳本:

[root@web100 ~]# vim mysql.sh

wKiom1hSjgnyUtmjAACCM7IHho4113.png-wh_50

 

 

製作一個判斷輸入數值是否在區間範圍內的腳本:

[root@web100 ~]# vim 1-10.sh

wKioL1hSjinSPEVJAABgB_aFUuk071.png-wh_50

 

製作一個批量創建用戶的腳本:

[root@web100 ~]# vim useradd.sh

wKiom1hSjjeh-jWtAAD8BNATOS4520.png-wh_50


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章