文章目錄
【shell功底1,分佈式計算】
【shell功底2,多組件管理腳本】
表達式
0、(())、test=[] 、[[]]
test 用於檢查某個條件是否成立
- test 和 [] 是等價的,後續我們會交替使用 test 和 []
- [[ ]] 是 test 的升級版,對細節進行了優化,並且擴展了一些功能
- (( )) 只能進行整數運算,不能對小數(浮點數)或者字符串進行運算
注意:
[[ ]]和expression之間的空格,這兩個空格是必須的,否則會導致語法錯誤。
[]和expression之間的空格,這兩個空格是必須的,否則會導致語法錯誤。[]的寫法更加簡潔,比 test 使用頻率高
- 總之,統一用[[]] 就好了
1、=~
其中 ~ 其實是對後面的正則表達式表示匹配的意思,如果匹配就輸出1, 不匹配就輸出0
[[ $test =~ \^\[0-9\]+ ]] && echo 1 || echo 0
2、文件表達式
表達式 | 意義 |
---|---|
-e filename | 如果 filename存在,則爲真 |
-d filename | 如果 filename爲目錄,則爲真 |
-f filename | 如果 filename爲常規文件,則爲真 |
-L filename | 如果 filename爲符號鏈接,則爲真 |
-r filename | 如果 filename可讀,則爲真 |
-w filename | 如果 filename可寫,則爲真 |
-x filename | 如果 filename可執行,則爲真 |
-s filename | 如果文件長度不爲0,則爲真 |
-h filename | 如果文件是軟鏈接,則爲真 |
filename1 -nt filename2 | 如果 filename1比 filename2新,則爲真 |
filename1 -ot filename2 | 如果 filename1比 filename2舊,則爲真 |
3、整數變量表達式
表達式 | 意義 |
---|---|
-eq | 等於 |
-ne | 不等於 |
-gt | 大於 |
-ge | 大於等於 |
-lt | 小於 |
-le | 小於等於 |
4、字符串變量表達式
表達式 | 意義 |
---|---|
If [ $a = $b ] | 如果string1等於string2,則爲真 |
if [ $string1 != $string2 ] | 如果string1不等於string2,則爲真 |
if [ -n $string ] | 如果string 非空(非0),返回0(true) |
if [ -z $string ] | 如果string 爲空,則爲真 |
if [ $sting ] | 如果string 非空,返回0 (和-n類似) |
5、條件表達式的相反
表達式 | 意義 |
---|---|
if [ ! 表達式 ] | |
if [ ! -d $num ] | 如果不存在目錄$num |
if [ 表達式1 –a 表達式2 ] | 條件表達式的並列 |
if [ 表達式1 –o 表達式2 ] | 條件表達式的或 |
6、set -x
用於腳本調試,在liunx腳本中可用set -x就可有詳細的日誌輸出.免的老是要echo了
#!/bin/bash
set -x
a=${1}
b=$
#運行結果
bash a.sh 1 2
+ a=1
+ b=1
7、set -e介紹
#!/bin/bash
set -e
command 1
command 2
...
exit 0
你寫的每個腳本都應該在文件開頭加上set -e,這句語句告訴bash如果任何語句的執行結果不是true則應該退出。這樣的好處是防止錯誤像滾雪球般變大導致一個致命的錯誤,而這些錯誤本應該在之前就被處理掉。如果要增加可讀性,可以使用set -o errexit,它的作用與set -e相同。
使用-e幫助你檢查錯誤。如果你忘記檢查(執行語句的結果),bash會幫你執行。不幸的是,你將無法檢查$?,因爲如果執行的語句不是返回0,bash將無法執行到檢查的代碼。你可以使用其他的結構:
command
if [ "$?"-ne 0]; then
echo "command failed";
exit 1;
fi
# could be replaced with
# 能夠被代替爲
command || { echo "command failed"; exit 1; }
#或者
if ! command; then
echo "command failed";
exit 1;
fi
如果你有一個命令返回非0或者你對語句執行的結果不關心,那你可以使用command || true,或者你有一段很長的代碼,你可以關閉錯誤檢查(不使用set -e),但是我還是建議你保守地使用這個語句。
常用命令
2、變量 — 特殊變量 — 環境變量
3、算數表達式
4、if 變量實戰
5、for case while 實戰
- 5.1、將/opt目錄下所有的日誌文件全自動打包
- 5.2、找出192.168.1.1-10網段中,服務器已經關機的IP地址
- 5.3、批量創建賬號並隨機密碼