if命令
- if ... fi 語句残家;
- if ... else ... fi 語句;
- if ... elif ... else ... fi 語句崇呵。
if [ expression ]; then
something;
fi
shell括號總結:
-
[]
單方括號-
[ ]
中前后必須有空格子檀, - 內部操作符與操作變量之間要有空格:如
[ "a" = "b" ]
- 字符串比較中,
> <
需要寫成\> \<
進行轉義 -
[ ]
中字符串或者${}
變量盡量使用""
雙引號擴住丘喻,避免值未定義引用的錯誤 -
[ ]
中可以使用–a
,–o
進行邏輯運算:-
-a
表示邏輯與;-o
表示邏輯或念颈;!
表示邏輯否
-
-
-
[[]]
雙方括號-
[[ ]]
兩個符號左右都要有空格分隔 - 內部操作符與操作變量之間要有空格:如
[[ “a” = “b” ]]
- 字符串比較中泉粉,可以直接使用
>
,<
無需轉義 -
[[ ]]
中字符串或者${}
變量盡量如未使用""
雙引號,會進行模式和元字符匹配 -
[[ ]]
內部可以使用&&
,||
進行邏輯運算
-
-
$
符號后的括號:-
${value}
表示變量value的值舍肠,在不引起歧義情況下可省略{}
-
$(cmd)
表示命令替換搀继,結果為shell執(zhí)行cmd命令的輸出,和`cmd`
結果相同 -
$((exp))
和`expr exp`
效果相同, 計算數(shù)學表達式exp的數(shù)值, 其中exp只要符合C語言的運算規(guī)則即可, 甚至三目運算符和邏輯表達式都可以計算.
-
-
多條命令執(zhí)行:
-
(cmd1;cmd2;cmd3)
新開一個子shell順序執(zhí)行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最后一個命令后可以沒有分號. -
{ cmd1;cmd2;cmd3;}
在當前shell順序執(zhí)行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最后一個命令后必須有分號, 第一條命令和左括號之間必須用空格隔開. - 對
{}
和()
而言, 括號中的重定向符只影響該條命令, 而括號外的重定向符影響到括號中的所有命令.
-
-
雙括號的特殊用法:
-
(())
增強括號的用法, 常用于算術運算比較. 雙括號中的變量可以不使用$符號前綴, 只要括號中的表達式符合C語言運算規(guī)則, 支持多個表達式用逗號分開.- 比如:可以直接使用
for((i=0;i<5;i++))
, 如果不使用雙括號, 則為:
或者for i in `seq 0 4`
for i in {0..4}
- 再如:可以直接使用
if (($i<5))
, 如果不使用雙括號, 則為:if [ $i -lt 5 ]
- 比如:可以直接使用
-
[[]]
增強方括號用法, 常用于字符串的比較. 主要用于條件測試, 雙括號中的表達式可以使用&&
,||
,<
,>
等C語言語法.- 比如可以直接使用
if [[ $a != 1 && $a != 2 ]]
,如果不適用雙括號, 則為if [ $a -ne 1] && [ $a != 2 ]
或者if [ $a -ne 1 -a $a != 2 ]
.
- 比如可以直接使用
-
- ps命令:
之前在部署安全環(huán)境的時候發(fā)現(xiàn)數(shù)據庫明文配置錯誤翠语,需要在配置文件里手動更正數(shù)據庫配置,并重啟服務财边。而當tomcat服務沒有停止的時候肌括,重啟服務報錯,因此需要查詢當前正在運行的tomcat進程id酣难,并強制停止谍夭。需要用到如下命令:
|
$ ps -ef|grep tomcat #查找tomcat進程
$ kill -9 進程ID #停止某個ID的進程
|
ps命令是Process Status的縮寫,為我們提供進程快照憨募,即使用ps命令查看的進程情況只是在用戶執(zhí)行ps命令時刻進程的狀態(tài)紧索,并不是動態(tài)的。如果要動態(tài)查看進程菜谣,需要使用另一個命令--top珠漂,此處不贅述。
例子中使用ps命令帶有-ef參數(shù)尾膊,-e顯示所有進程媳危,-f顯示全格式。
例子中使用的命令用到管道操作符(pipte operator: |)冈敛,’|’操作符的作用是將上一個命令的標準輸出(STDOUT)作為第二個命令的標準輸入(STDIN)待笑。
|
注意:管道操作符使用條件:
1、管道命令只能處理前一個命令的標準輸出抓谴,而不能處理標準錯誤(STDERR)暮蹂;
2寞缝、管道命令右邊命令必須能夠接受標準輸入。
|
grep(global search regular expression and print out the line)使用正則表達式搜索文本仰泻,并將匹配的行打印出來荆陆。
將上述命令分解:
- 查找所有進程,并將結果存入output文檔:
|
$ ps –ef > output
|
- 在output中查找tomcat關鍵字:
|
$ grep tomcat output
|
[圖片上傳失敗...(image-625cdd-1539174380174)]
得到結果:
grep命令:強大的搜索命令我纪,一般與|連用慎宾。
sed命令:
a) -i參數(shù):更改原文件;(危險操作)
xargs
linux中 2>&1 的含義:
在CAD的shell腳本中看到很多類似的語句:
|
grep "rpmextract" /etc/sudoers.d/cloudautodeploy >/dev/null 2>&1
|
|
>: cmd > file命令表示將cmd命令的輸出重定向到文件file中浅悉,若file已有內容則清空趟据。
0,1,2為文件描述符(file descriptor):
0:stdin標準輸入,
1:stdout標準輸出术健,文件描述符系統(tǒng)默認為1汹碱,因此“>/dev/null”等同于“1>/dev/null”
2:stderr標準錯誤
/dev/null:空設備,所有重定向到它的信息都會消失荞估。
|
因此咳促,>/dev/null(即1>/dev/null)表示將命令標準輸出(stdout: 1)重定向到/dev/null文件,2>&1表示將命令標準錯誤(stderr: 2)重定向到標準輸出(stdout: 1)的文件位置勘伺。則>/dev/null 2>&1表示命令的標準輸出與標準錯誤都重定向到/dev/null文件跪腹。
參考列表:shell中括號的特殊用法