1. 程式人生 > >Bash scripts

Bash scripts

redhat

創建新shell腳本

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


引用和轉義
引用和轉義在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

技術分享


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

技術分享

命令替換
命令替換在子shell中執行指定命令並用命令輸出替換腳本中的命令替換。

技術分享


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

技術分享


Shell計算命令:
用$[]表示數學運算。
# echo $[1+2]
# a=1; echo $[$[$a+1]*2]

技術分享

用expr表示數學運算。
# echo `expr 1 + 2`

技術分享

用let指示數學運算。
# let A=1+2
# echo $A

技術分享

用(())表示數學運算。bash內建功能,效率高。

#!/bin/bash
for ((i=1;i<10;i++))
do
((j+=i))
done
echo $j


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

技術分享


循環與計算結合:


技術分享








Bash位置參數

使用位置參數來讀取傳遞給腳本的命令行參數或選項輸入。各種特殊變量存儲傳遞的選項編號
Bash解析的個別參數或整個原始命令行。
指定的位置參數總數:$#
位置參數自身:$0、$1、$2、$3....
所有位置參數: [email protected]$*

技術分享

技術分享




退出狀態
Linux命令完成時,將返回退出狀態。成功完成程序時,將返回0的推出狀態。這被bash
當作邏輯True值。非零退出狀態通常表示發生了錯誤,並且被bash當作邏輯False值。
例如:grep的退出狀態的含義:
0 – 在指定的文件中找到了模式
1 – 在指定的文件中未找到模式
>1 – 一些其他錯誤(無法打開文件、錯誤的搜索表達式等)
推出狀態的值被存儲在"?"中,可以使用以下命令查看:
# echo $?

技術分享


test條件判斷
test命令可用於評估bash腳本中的表達式。它評估其參數所指定的表達式,如果表達式
為true,返回零退出狀態,如果表達式為false,則返回非零退出狀態。test具有替代語
法,使用方括號"[]"將表達式括起來,這樣更易於閱讀。

-n ##有無數值

技術分享

-z ##是否為空

技術分享

技術分享


-e ##是否存在

-d ##類型為目錄i

-f ##類型為文件

-s ##類型為socket

-L ##類型為link

技術分享


-eq ##等於

-ne ##不等

-lt ##小於

-le ##小於等於

-gt ##大於

-ge ##大於等於

技術分享



if語句
if命令檢查if後面的命令或列表的退出值。如果第一個命令評估為true/零,則運行then之後的命令列表,直至任一else。如果第一個命令評估為false/非零,則運行else與fi之間的命令列表(反向平寫if,標記if塊的結束)

技術分享

技術分享


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

技術分享

技術分享


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

技術分享

技術分享

技術分享



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
























Bash scripts