注意:運(yùn)算符與左右的字符串之間必須用空格隔開巴元,即使左邊沒有字符串如文件測試運(yùn)算符也需要有空格隔開
假定變量a為"abc" b為"def"
- = 檢測二個(gè)字符串是否相等,相等為true [ $a = $b ] 返回false
- != 檢測二個(gè)字符串是否相等亩冬,不相等為true
- -z檢測字符串長度是否為0 為0返回true [ -z $a] 返回false
- -n檢測字符串長度是否為0 不為0返回true [ -n $a] 返回true
- str檢測字符串是否為空 不為空返回true [$a]返回true
str=null 說明str沒有指向任何對(duì)象
而str長度為零時(shí)str肯定不為null的,此時(shí)str指向一個(gè)長度為零的字符串
- -b file 檢測文件是否是塊設(shè)備文件硼身,如果是硅急,則返回 true。 [ -b $file ] 返回 false佳遂。(注意:)
Ctrl+d退出cat命令
不小心vim狀態(tài)下摁了Ctrl+s將vim假鎖以后 摁下Ctrl+q即可解除
使用vim時(shí)营袜,如果你不小心按了 Ctrl + s后,你會(huì)發(fā)現(xiàn)不能輸入任何東西了丑罪,像死掉了一般荚板,其實(shí)vim并沒有死掉,這時(shí)vim只是停止向終端輸出而已吩屹,要想退出這種狀態(tài)跪另,只需按Ctrl + q 即可恢復(fù)正常。
linux echo命令的-n煤搜、-e兩個(gè)參數(shù)
echo -n 不換行輸出
$echo -n "123"
$echo "456"
最終輸出
123456
而不是
123
456
echo -e 處理特殊字符
若字符串中出現(xiàn)以下字符免绿,則特別加以處理,而不會(huì)將它當(dāng)成一般文字輸出:
\a 發(fā)出警告聲擦盾;
\b 刪除前一個(gè)字符嘲驾;
\c 最后不加上換行符號(hào);
\f 換行但光標(biāo)仍舊停留在原來的位置迹卢;
\n 換行且光標(biāo)移至行首辽故;
\r 光標(biāo)移至行首,但不換行腐碱;
\t 插入tab誊垢;
\v 與\f相同;
\ 插入\字符症见;
\nnn 插入nnn(八進(jìn)制)所代表的ASCII字符喂走;
$echo -e "a\bdddd"
dddd
$echo -e "a\adddd" //輸出同時(shí)會(huì)發(fā)出報(bào)警聲音
adddd
$echo -e "a\ndddd" //自動(dòng)換行
a
dddd
'內(nèi)容'單引號(hào)就不進(jìn)行轉(zhuǎn)義,直接原樣輸出
printf命令
%-10s 指一個(gè)寬度為10個(gè)字符(-表示左對(duì)齊筒饰,沒有則表示右對(duì)齊)缴啡,任何字符都會(huì)被顯示在10個(gè)字符寬的字符內(nèi),如果不足則自動(dòng)以空格填充瓷们,超過也會(huì)將內(nèi)容全部顯示出來业栅。
%s %b
注意:在這里%b個(gè)人理解為將要輸入的進(jìn)行轉(zhuǎn)義輸出秒咐,如"A\nB"則輸出A 在對(duì)"\n"進(jìn)行轉(zhuǎn)義(換行) 在輸出B
加法的表示方式
- 一種錯(cuò)誤的加法表示法
- 一種正確的加法表示法
可知增加一對(duì)括號(hào)即可
shell 函數(shù)
1、可以帶function fun() 定義碘裕,也可以直接fun() 定義,不帶任何參數(shù)携取。
2、參數(shù)返回帮孔,可以顯示加:return 返回雷滋,如果不加,將以最后一條命令運(yùn)行結(jié)果文兢,作為返回值晤斩。 return后跟數(shù)值n(0-255)
example1:
funWithReturn(){
echo "這個(gè)函數(shù)會(huì)對(duì)輸入的兩個(gè)數(shù)字進(jìn)行相加運(yùn)算..."
echo "輸入第一個(gè)數(shù)字: "
read aNum
echo "輸入第二個(gè)數(shù)字: "
read anotherNum
echo "兩個(gè)數(shù)字分別為 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "輸入的兩個(gè)數(shù)字之和為 $? !"
輸出類似下面:
這個(gè)函數(shù)會(huì)對(duì)輸入的兩個(gè)數(shù)字進(jìn)行相加運(yùn)算...
輸入第一個(gè)數(shù)字:
1
輸入第二個(gè)數(shù)字:
2
兩個(gè)數(shù)字分別為 1 和 2 !
輸入的兩個(gè)數(shù)字之和為 3 !
函數(shù)返回值在調(diào)用該函數(shù)后通過 $? 來獲得。
注意:所有函數(shù)在使用前必須定義姆坚。這意味著必須將函數(shù)放在腳本開始部分澳泵,直至shell解釋器首次發(fā)現(xiàn)它時(shí),才可以使用兼呵。調(diào)用函數(shù)僅使用其函數(shù)名即可兔辅。
函數(shù)參數(shù)
在Shell中,調(diào)用函數(shù)時(shí)可以向其傳遞參數(shù)击喂。在函數(shù)體內(nèi)部维苔,通過 $n 的形式來獲取參數(shù)的值,例如懂昂,$1表示第一個(gè)參數(shù)介时,$2表示第二個(gè)參數(shù)...
帶參數(shù)的函數(shù)示例:
funWithParam(){
echo "第一個(gè)參數(shù)為 $1 !"
echo "第二個(gè)參數(shù)為 $2 !"
echo "第十個(gè)參數(shù)為 $10 !"
echo "第十個(gè)參數(shù)為 ${10} !"
echo "第十一個(gè)參數(shù)為 ${11} !"
echo "參數(shù)總數(shù)有 $# 個(gè)!"
echo "作為一個(gè)字符串輸出所有參數(shù) $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
輸出結(jié)果:
第一個(gè)參數(shù)為 1 !
第二個(gè)參數(shù)為 2 !
第十個(gè)參數(shù)為 10 !
第十個(gè)參數(shù)為 34 !
第十一個(gè)參數(shù)為 73 !
參數(shù)總數(shù)有 11 個(gè)!
作為一個(gè)字符串輸出所有參數(shù) 1 2 3 4 5 6 7 8 9 34 73 !
注意,$10 不能獲取第十個(gè)參數(shù)忍法,獲取第十個(gè)參數(shù)需要${10}潮尝。當(dāng)n>=10時(shí),需要使用${n}來獲取參數(shù)饿序。
另外,還有幾個(gè)特殊字符用來處理參數(shù):
參數(shù)處理 說明
$# 傳遞到腳本的參數(shù)個(gè)數(shù)
$** 以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù)*
$$ 腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào)
$! 后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào)
$@ 與$*相同羹蚣,但是使用時(shí)加引號(hào)原探,并在引號(hào)中返回每個(gè)參數(shù)。
$- 顯示Shell使用的當(dāng)前選項(xiàng)顽素,與set命令功能相同咽弦。
$? 顯示最后命令的退出狀態(tài)。0表示沒有錯(cuò)誤胁出,其他任何值表明有錯(cuò)誤型型。