bash reference 2 bash programming

數(shù)組

arr=(ele1 ele2 ele3) 元素之間用空格分開
隨機訪問數(shù)組${arr[2]}
訪問整個數(shù)組${arr[]}(for ele in ${arr[]})
unset ${arr[idx]}可以把idx處元素變成空,unset arr則整個數(shù)組為空。
http://zengrong.net/post/1518.htm

輸入重定向

內(nèi)聯(lián)輸入重定向(inline input redirection):
command << marker
data
marker
eg:
wc << EOF
test string 1
EOF

shell的數(shù)學(xué)運算

exit code

$?打印上一條命令退出的狀態(tài)碼
0 成功,1位置錯誤,2誤用shell命令,126不可執(zhí)行,127沒找到命令,128無效退出參數(shù),128+x linux信號x的錯誤,130 ctrl+C中止,255 退出狀態(tài)碼越界。

if-then語句

format:

if command
then
  command
elif command
then
  command
else
  command
fi

test命令

test condition,if-then中你可以使用[ condition ](注意方括號兩邊的空格)
可用的比較命令:

數(shù)值比較

-eq -ge -gt -le -lt -ne(not equal)

字符串比較

下面的>和<使用的時候必須轉(zhuǎn)義
= != < > -n(字符串長度是否非0) -z(字符串長度是否為0)

文件比較

  • -d 是否存在并且為目錄
  • -e 是否存在
  • -f 是否存在并且是文件
  • -r 是否存在并可讀
  • -s 是否存在并非空
  • -w 是否存在并可寫
  • -x 是否存在并可執(zhí)行
  • -O 是否存在并屬于當前用戶
  • -G 時候存在并屬于當前組
  • file1 -nt file2 file1是否比file2更新
  • file1 -ot file2 file1是否比file2更舊

復(fù)合條件

  • [ condition1 ] && [ condition2 ]
  • [ condition1 ] || [ condition2 ]

圓雙括號

(( expression )),用來做高級數(shù)學(xué)運算。
支持++, --, ~, !, **, <<, >>, &, |, &&, ||
e.g:

val1=10
if (( val1 ** 2 > 90))
then
    (( val2 = $val1 ** 2 ))
fi
echo $val2

方雙括號

[[ expression ]],支持用正則匹配字符串
if [[ $USER == r* ]]

case

case $val in
a | b)
    command1;;
c)
    command2;;
*)
    default_command;;
esac

for

for var in list
do
    command
done

TIPS:

list append:

list=$list" extra"可以在list后面添加一個元素

修改list分隔符:

list元素之間的分隔符是IFS環(huán)境變量(internal field separator),它定義了bash用來做字段分隔符的一系列字符。默認情況下是空格、tab和換行。
可以通過修改這個環(huán)境變量來達到修改分隔符的目的。這樣list就可以采用各種分隔符。
e.g

IFS=$'\n'
IFS=$'\n:,;' # 指定多個分隔符

C style for

for (( variable assignment; condition; iteration process ))
e.g

for (( i=0; i <10; i++ ))
do
    echo $i
done

while

while test command
    test command2
    ...
do
    command
done

test command會被依次執(zhí)行,最后一個命令的退出狀態(tài)碼會用來決定是否結(jié)束循環(huán)。

until

until test command
    test command2
    ...
do
    command
done

和while類似。

break && continue

break n和continue n表示作用于第n層循環(huán),默認n=1,就是當前循環(huán)。

腳本輸入?yún)?shù)

#$是腳本命令行參數(shù)個數(shù)。${!#}(在花括號里不能使用$,需要使用!)
$*把所有參數(shù)當作一個變量
$@把所有參數(shù)當作一個list,可以遍歷。
shift可以把$i+1參數(shù)移動到$i。

重定向

&>可以同時重定向stderr和stdout。
&1,&2可以把某些輸出單獨定向到stderr或者stdout。
在腳本內(nèi)永久重定向可以exec 1/2>xxx,同理exec 0<input.
實際上,3~8的操作符是保留的,你可以exec 3~8>xxx,也可以exec 3~8<xxx
exec n>&-則表示關(guān)閉文件操作符。
lsof可以看到文件描述符。

臨時文件和臨時文件夾

man mktemp
mktemp youname.XXXXXX

信號

ctrl+c = SIGINT
ctrl+z = SIGSTP
man trap
trap command signal
trap - signal

重啟已經(jīng)停止的進程

bg $job_number

調(diào)整進程優(yōu)先級

nice/renice

函數(shù)

函數(shù)聲明:

function name {
    commands
}

或者

name() {
    commands
}

老函數(shù)聲明會被新的覆蓋,且不會給出任何提示。
#?或者上一條命令執(zhí)行的狀態(tài)碼,同理在函數(shù)調(diào)用之后,#?可以獲得函數(shù)返回的狀態(tài)碼。

輸入?yún)?shù)

func $var1 $var2...
和腳本輸入一樣,參數(shù)放在$1... $n。同理,#$和#@也可以用。

函數(shù)變量

不在函數(shù)中使用全局變量,可以用local var的方法聲明成局部變量。

數(shù)組和函數(shù)

如果把數(shù)組作為參數(shù)傳入函數(shù),函數(shù)只會取數(shù)組的第一個值。
需要用到#@,同理也可以返回一個數(shù)組。

function test {
    local newarray
    newarray = `echo "$@"`
    echo ${newarray[*]}
}
arr=(1 2 3 4 5)
test ${arr[*]}

source

source會在當前bash的上下文執(zhí)行命令,而不是新開bash。.和source的作用是一樣的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容