shell指令碼常用命令簡單總結

2021-07-10 03:30:13 字數 4565 閱讀 5040

整理自個人筆記和網路

1.shell中位置引數

$0 這個程式的執行名字

$n 這個程式的第n個引數值,n=1..9

$* 這個程式的所有引數,此選項引數可超過9個。

$# 這個程式的引數個數

$$ 這個程式的pid(指令碼執行的當前程序id號)

$! 執行上乙個背景指令的pid(後台執行的最後乙個程序的程序id號)

$? 執行上乙個指令的返回值 (顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤)

$- 顯示shell使用的當前選項,與set命令功能相同

$@ 跟$*類似,但是可以當作陣列用

2.shell條件判斷命令

–b 當file存在並且是塊檔案時返回真

-c 當file存在並且是字元檔案時返回真

-d 當pathname存在並且是乙個目錄時返回真

-e 當pathname指定的檔案或目錄存在時返回真

-f 當file存在並且是正規檔案時返回真

-g 當由pathname指定的檔案或目錄存在並且設定了sgid位時返回為真

-h 當file存在並且是符號鏈結檔案時返回真,該選項在一些老系統上無效

-k 當由pathname指定的檔案或目錄存在並且設定了「粘滯」位時返回真

-p 當file存在並且是命令管道時返回為真

-r 當由pathname指定的檔案或目錄存在並且可讀時返回為真

-s 當file存在檔案大小大於0時返回真

-u 當由pathname指定的檔案或目錄存在並且設定了suid位時返回真

-w 當由pathname指定的檔案或目錄存在並且可執行時返回真。乙個目錄為了它的內容被訪問必然是可執行的。

-o 當由pathname指定的檔案或目錄存在並且被子當前程序的有效使用者id所指定的使用者擁有時返回真。

unix shell 裡面比較字元寫法:

-eq   等於

-ne     不等於

-gt     大於

-lt     小於

-le     小於等於

-ge   大於等於

-z     空串

=     兩個字元相等

!=     兩個字元不等

-n     非空串

總結:文件比較運算子  

-e filename  假如 filename存在,則為真  [ -e /var/log/syslog ] 

-d filename  假如 filename為目錄,則為真  [ -d /tmp/mydir ] 

-f filename  假如 filename為常規文件,則為真  [ -f /usr/bin/grep ] 

-l filename  假如 filename為符號鏈結,則為真  [ -l /usr/bin/grep ] 

-r filename  假如 filename可讀,則為真  [ -r /var/log/syslog ] 

-w filename  假如 filename可寫,則為真  [ -w /var/mytmp.txt ] 

-x filename  假如 filename可執行,則為真  [ -l /usr/bin/grep ] 

filename1-nt filename2  假如 filename1比 filename2新,則為真  [ /tmp/install/etc/services -nt /etc/services ] 

filename1-ot filename2  假如 filename1比 filename2舊,則為真  [ /boot/bzimage -ot arch/i386/boot/bzimage ] 

字串比較運算子 (請注意引號的使用,這是防止空格擾亂**的好方法)  

-z string  假如 string長度為零,則為真  [ -z "$myvar" ] 

-n string  假如 string長度非零,則為真  [ -n "$myvar" ] 

string1= string2  假如 string1和 string2相同,則為真  [ "$myvar" = "one two three" ] 

string1!= string2  假如 string1和 string2不同,則為真  [ "$myvar" != "one two three" ] 

算術比較運算子  

num1-eq num2  等於 [ 3 -eq $mynum ] 

num1-ne num2  不等於 [ 3 -ne $mynum ] 

num1-lt num2  小於 [ 3 -lt $mynum ] 

num1-le num2  小於或等於 [ 3 -le $mynum ] 

num1-gt num2  大於 [ 3 -gt $mynum ] 

num1-ge num2  大於或等於 [ 3 -ge $mynum ]

3.shell陣列

陣列(array)是乙個由若干同型別變數組成的集合,

陣列均由連續的儲存單元組成,最低位址對應於陣列的第乙個元素,最高位址對應於最後乙個元素。

shell不直接支援如堆疊、佇列、鍊錶等資料結構,但可以很容易實現線性資料結構。對於樹形、圖等複雜的資料結構,shell理論上可以實現,但難度較大。

shell只支援一維陣列,array[x]表示array陣列的第x+1個元素,支援的最大數值標號是599 147 937 791。

shell取得陣列值(引用陣列元素)格式是:$。

shell中允許陣列空缺元素,即可以不連續地給陣列賦值。還可以用圓括號將一組值賦給陣列。

city=(nanjing beijing melbourne newyork)    #圓括號內以空格為分隔符,依次賦給陣列元素。

echo "extracting substring"  #抽取字串  

echo $            #抽取整個陣列  nanjing atlanta massachusetts marseilles  

echo $            #抽取從第1個元素到結束的陣列  atlanta massachusetts marseilles  

echo $            #抽取從第3個元素到結束的陣列  marseilles  

echo $          #抽取從第0個元素開始的兩個元素  nanjing atlanta  

echo  

echo "removing substring"    #刪除字串  

echo $          #刪除匹配m*a的最短字串  nanjing atlanta ssachusetts rseilles  

echo $         #刪除匹配m*a的最長字串  nanjing atlanta chusetts rseilles  

echo  

echo "replcing substring"    #替換子串功能  

echo $     #替換第1次與m*a匹配的子串  nanjing atlanta year year  

echo $    #替換所有與mas匹配的子串   nanjing atlanta yearsachusetts yeareillesyear

4.

linux shell 中的反引號,單引號,雙引號

反引號位 (`) 位於鍵盤的tab鍵的上方、1鍵的左方。注意與單引號(')位於enter鍵的左方的區別。

在linux中起著命令替換的作用。命令替換是指shell能夠將乙個命令的標準輸出插在乙個命令列中任何位置。

如下,shell會執行反引號中的date命令,把結果插入到echo命令顯示的內容中。

[root@localhost sh]# echo the date is `date`

the date is 2023年 03月 14日 星期一 21:15:43 cst

單引號、雙引號用於使用者把帶有空格的字串賦值給變數事的分界符。

[root@localhost sh]# str="today is monday"

[root@localhost sh]# echo $str

today is monday

如果沒有單引號或雙引號,shell會把空格後的字串解釋為命令。

[root@localhost sh]# str=today is monday

bash: is: command not found

單引號和雙引號的區別。單引號告訴shell忽略所有特殊字元,而雙引號忽略大多數,但不包括$、\、`。

[root@localhost sh]# testvalue=100

[root@localhost sh]# echo 'the testvalue is $testvalue'

the testvalue is $testvalue

[root@localhost sh]# echo "the testvalue is $testvalue"

the testvalue is 100

shell指令碼常用命令

basename 1.basename 是去除目錄後剩下的名字 example shell temp home temp 1.test shell base basename temp shell echo base 結果為 1.test 2.dirname 是取目錄 example shell t...

Shell常用命令總結

shell常用命令總結 1 ls命令 列出檔案 ls la 列出當前目錄下的所有檔案和資料夾 ls a 列出當前目錄下所有以 a字母開頭的檔案 ls l txt 列出當前目錄下所有字尾名為 txt的檔案 2 cp命令 複製 cp a.txt b.txt 把檔案 a的內容複製到b檔案 cp a.txt...

shell 常用命令總結

bin bash if 1 gt 90 then echo good,1 elif 1 gt 70 then echo ok,1 else echo bad,1 fiexit 0 for day in sun mon tue wed thu fri sat doecho day done 如果列表被...