當前位置:
首頁 > 最新 > Linux Bash腳本15分鐘進階教程

Linux Bash腳本15分鐘進階教程

slice1="$"

# = "path2/file.ext"

slice2="$"

# = "path2"

slice3="$"

# = "file.ext"(注意:"-"前有空格)

pos=6

len=5

slice4="$:$}"

# = "path2"

替換操作(使用globbing)

f="path1/path2/file.ext"

single_subst="$"

# = "x/path2/file.ext"

global_subst="$"

# = "x/x/file.ext"

# 字元串拆分

readonly DIR_SEP="/"

array=($/ })

second_dir="$"

# = path2

刪除頭部或尾部(使用globbing)

f="path1/path2/file.ext"

# 刪除字元串頭部

extension="$" # = "ext"

# 以貪婪匹配方式刪除字元串頭部

filename="$" # = "file.ext"

# 刪除字元串尾部

dirname="$"

# = "path1/path2"

# 以貪婪匹配方式刪除字元串尾部

root="$"

# = "path1"

避免使用臨時文件

有些命令需要以文件名為參數,這樣一來就不能使用管道。這個時候?

# 下載並比較兩個網頁

diff

還有一個非常有用處的是」here documents」,它能讓你在標準輸入上輸入多行字元串。下面的』MARKER』可以替換成任何字詞。

# 任何字詞都可以當作分界符

command

...

$

$(cmd)

...

MARKER

如果文本里沒有內嵌變數替換操作,你可以把第一個MARKER用單引號包起來:

command

...

no substitution is happening here.

$ (dollar sign) is passed through verbatim.

...

MARKER

內置變數

變數說明

$0腳本名稱

$n傳給腳本/函數的第n個參數

$$腳本的PID

$!上一個被執行的命令的PID(後台運行的進程)

$?上一個命令的退出狀態(管道命令使用$)

$#傳遞給腳本/函數的參數個數

$@傳遞給腳本/函數的所有參數(識別每個參數)

$*傳遞給腳本/函數的所有參數(把所有參數當成一個字元串)

提示

使用$*很少是正確的選擇。

$@能夠處理空格參數,而且參數間的空格也能正確的處理。

使用$@時應該用雙引號括起來,像」$@」這樣。

調試

對腳本進行語法檢查:

bash -n myscript.sh

跟蹤腳本里每個命令的執行:

bash -v myscripts.sh

跟蹤腳本里每個命令的執行並附加擴充信息:

bash -x myscript.sh

你可以在腳本頭部使用set -o verbose和set -o xtrace來永久指定-v和-o。當在遠程機器上執行腳本時,這樣做非常有用,用它來輸出遠程信息。

什麼時候不應該使用bash腳本

你的腳本太長,多達幾百行

你需要比數組更複雜的數據結構

出現了複雜的轉義問題

有太多的字元串操作

不太需要調用其它程序和跟其它程序管道交互

擔心性能

這個時候,你應該考慮一種腳本語言,比如Python或Ruby。

END

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 運維社 的精彩文章:

你是不是搞運維的,一句話就能證明!

TAG:運維社 |