整理自個人筆記和網路
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 如果列表被...