Linux Shell雜記

簡介

關(guān)于Shell的學(xué)習(xí)資料,網(wǎng)上已經(jīng)是多不勝數(shù)。本文主要記錄個人在學(xué)習(xí)和使用Shell的過程中零碎的問題、小知識點和相關(guān)資料的索引。主要作用方便個人查閱。@_@

個人常用的Linux命令在線查詢網(wǎng)站:http://man.linuxde.net/

正文

1. #!/bin/bash? ?出現(xiàn)在程序的第一行,#!?指明執(zhí)行該文本的程序為/bin/bash

2. 特殊環(huán)境變量:$0、$n(數(shù)值)、$#、$*、$@、$?、$$? ? ?來源

$0? 當(dāng)前腳本的文件名

$n? ?傳遞給腳本或函數(shù)的參數(shù)。n 是一個數(shù)字,表示第幾個參數(shù)。例如,第一個參數(shù)是$1,第二個參數(shù)是$2。

$#? ?傳遞給腳本或函數(shù)的參數(shù)個數(shù)。

$*? ?傳遞給腳本或函數(shù)的所有參數(shù)。

$@? ?傳遞給腳本或函數(shù)的所有參數(shù)。被雙引號(" ")包含時,與 $* 稍有不同

$?? ?上個命令的退出狀態(tài),或函數(shù)的返回值。

$$? ?當(dāng)前Shell進(jìn)程ID。對于 Shell 腳本,就是這些腳本所在的進(jìn)程ID。

3.?變量引用和替換:來源

${var}? ?變量本來的值

${var:-word}? 如果變量 var 為空或已被刪除(unset),那么返回?word,但不改變?var 的值。

${var:=word}? ?如果變量 var 為空或已被刪除(unset),那么返回 word,并將 var 的值設(shè)置為 word。

${var:?message}? ? 如果變量 var 為空或已被刪除(unset),那么將消息 message 送到標(biāo)準(zhǔn)錯誤輸出,可以用來檢測變量 var 是否可以被正常賦值。若此替換出現(xiàn)在Shell腳本中,那么腳本將停止運行。

${var:+word}? ?如果變量 var 被定義,那么返回 word,但不改變 var 的值。

4.?單引號(' ')字符串和雙引號(" ")字符串的區(qū)別:單引號字符串中不做轉(zhuǎn)義和變量替換,雙引號字符串反之。

5.?命令替換:1) $(command)? ?2) ` command ` (反引號 " ` ")

6.?輸入:?read [options]? var_list

7.?對腳本進(jìn)行語法檢查,不執(zhí)行腳本:bash -n 文件名

執(zhí)行調(diào)試腳本:bash -x 文件名

8.?條件語句格式:注意"_"處為空格

1)格式1:

if_[_expression_]

then

Statement(s) to be executed if expression is true

fi

如果then要和if在同一行需要有 ;

?if_[_expression_] ; then

if

2)格式2:

if_[_expression_]? ; then

Statement(s) to be executed if expression is true

else

Statement(s) to be executed if expression is not true

fi

3)?格式3:

if [ expression 1 ] ; then

Statement(s) to be executed if expression 1 is true

elif [ expression 2 ] ; then

Statement(s) to be executed if expression 2 is true

else

Statement(s) to be executed if no expression is true

fi

9.?字符串表達(dá)式:注意:使用[ ]命令測試表示式時,在操作數(shù)和操作符或者發(fā)括號的前后都至少要留一個空格。

string1 == string2? ? ?兩個字符串相同為true

string1 !=?string2? ? 兩個字符串不相同為true

-n?string? ? ?字符串不為空,?為true

-z string? ? ? 字符串為空,為true

10.?算術(shù)表達(dá)式:注意:使用[ ]命令測試表示式時,在操作數(shù)和操作符或者發(fā)括號的前后都至少要留一個空格。

exp1 -eq exp2? ? ?==

exp1 -ne exp2? ? ?!=

exp1 -gt exp2? ? ? >

exp1 -ge exp2? ? ?>=

exp1 -lt exp2? ? ? ?<

exp1 -le exp2? ? ? <=

? ? ?! exp1? ? ? ? ? ? ?取反

11.?文件測試表達(dá)式??注意:使用[ ]命令測試表示式時,在操作數(shù)和操作符或者發(fā)括號的前后都至少要留一個空格。

-d file? ? 若file為一個目錄,為true

-e file? ? 若file存在,為true

-f file? ? ?若file為一個普通文件,為true

-g file? ? 若file的SGID位被設(shè)置,為true

-r file? ? ? 若file可讀,為true

-s file? ? ?若file長度不為0,為true

-u file? ? ?若file的SUID位為被設(shè)置,為true

-w file? ? 若file可寫,為true

-x file? ? ? 若file可執(zhí)行,為true

12.?循環(huán)語句:?for? while? until

13.case esac語句:?參考

14.break和continue :?參考

15.?exit?n:結(jié)束運行。n為退出碼,即該腳本結(jié)束后$?的值。

約定俗成的退出碼:0表示成功,1-125為錯誤代碼,126?文件不可執(zhí)行,127命令未找到,128以及以上出現(xiàn)一個信號

16.?數(shù)值處理:bash變量的值是以字符串方式存儲的,若要進(jìn)行算術(shù)和邏輯操作,需要先轉(zhuǎn)為整數(shù),再將結(jié)果轉(zhuǎn)為字符串。

1)let命令 :若表達(dá)式中有空格或特殊字符,應(yīng)將表達(dá)式括在""中。

let "x = 6" "y = 9"? "z = 16"? ? #定義變量,并賦值

let t=x+y? ? ? ?

let?A=2**x? ?B=y*z? ? ? ? ? ?#2**x?表示2的x次方

2)shell擴(kuò)展$(( exp ))? ?

echo "There are $((60*60*24*365)) seconds in a non-leap year"

There are 31536000 seconds in a non-leap year

3)expr命令:在我的lElementaryOS虛擬機(jī)不管用,不太清什么情況

17.數(shù)組

bash支持一維數(shù)組。數(shù)組長度沒有限制,元素不必連續(xù)

name=(value1?value2 ... valueN )? ?#形式

ns=(max san [6]=zhang [25]=wang)? ?#定義一個數(shù)組${ns[0]} =?max、${ ns[1]} = san、${ns[6]}=zhang、? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #${ns[25]}=wang,其他位未賦值

ns[@]和ns[*]?表示整個數(shù)組

18.shell函數(shù)傳參返回結(jié)果

函數(shù)被調(diào)用時,在函數(shù)體內(nèi),$0、$n、$#、$*、$@會被函數(shù)實參替換,直到函數(shù)執(zhí)行完。

通過return命令可讓函數(shù)返回數(shù)值。一般用來表示函數(shù)執(zhí)行成功與否,0表示成功,其他值表示失敗。

函數(shù)體中用local可定義局部變量

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。