標籤:shell編程---檔案測試及特殊變數
一.算數運算
1、let 算術運算運算式
let C=$A+$B
2、$[算術運算運算式]
C=$[$A+$B]
3、$((算術運算運算式))
C=$(($A+$B))
4、expr 算術運算運算式,運算式中各運算元及運算子之間要有空格,而且要使用命令引用
C=`expr $A + $B`
5.提前結束指令碼程式
exit 狀態返回碼
6.檔案測試
-e FILE:測試檔案是否存在
-f FILE: 測試檔案是否為普通檔案
-d FILE: 測試指定路徑是否為目錄
-r FILE: 測試目前使用者對指定檔案是否有讀取許可權
-w FILE: 測試目前使用者對指定檔案是否有寫入權限
-x FILE: 測試目前使用者對指定檔案是否有執行許可權
[ -e /etc/inittab ]
[ -x /etc/rc.d/rc.sysinit ]
7.測試指令碼是否有語法錯誤
bash -n 指令碼
bash -x 指令碼:逐步執行
8.bash變數的類型
本地變數(局部變數)
環境變數
位置變數:
$1, $2, ...
shift
特殊變數:
$?:命令的執行狀態返回碼
$#:參數的個數
$*: 參數列表
[email protected]:參數列表
9.sed命令
1.模式空間
預設不編輯原檔案,僅對模式空間中的資料做處理;而後,處理結束後,將模式空間列印至螢幕(將原檔案中德資料逐行讀入到模式空間與模式比對,符合就處理不符合就丟棄)
2.sed [options] ‘AddressCommand‘ file ...
-n: 靜默模式,不再預設顯示模式空間中的內容
-i: 直接修改原檔案
-e SCRIPT -e SCRIPT:可以同時執行多個指令碼
-f /PATH/TO/SED_SCRIPT
sed -f /path/to/scripts file
-r: 表示使用擴充Regex
Address:
1、StartLine,EndLine
比如1,100
$:最後一行
2、/RegExp/
/^root/
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的所有行
4、LineNumber
指定的行
5、StartLine, +N
從startLine開始,向後的N行
Command:
d: 刪除合格行
p: 顯示合格行
a \string: 在指定的行後面追加新行,內容為string
\n:可以用於換行
i \string: 在指定的行前面添加新行,內容為string
r FILE: 將指定的檔案的內容添加至合格行處
w FILE: 將地址指定的範圍內的行另存至指定的檔案中
s/pattern/string/修飾符: 尋找並替換,預設只替換每行中第一次被模式比對到的字串
加修飾符
g: 全域替換
i: 忽略字元大小寫
s///: s###, [email protected]@@
\(\), \1, \2
l..e: like-->liker
love-->lover
like-->Like
love-->Love
&: 參考模式匹配整個串
sed ‘1,2d‘ /etc/passwd 刪除檔案中的指定行
sed練習:
1、刪除/etc/grub.conf檔案中行首的空白符
# sed -r ‘[email protected]^[[:spapce:]][email protected]@g‘ /etc/grub.conf
2、替換/etc/inittab檔案中"id:3:initdefault:"一行中的數字為5
# sed ‘[email protected]\(id:\)[0-9]\(:initdefault:\)@\15\[email protected]‘ /etc/inittab
3、刪除/etc/inittab檔案中的空白行
# sed ‘/^$/d‘ /etc/inittab
4、刪除/etc/inittab檔案中開頭的#號
# sed ‘[email protected]^#@@g‘ /etc/inittab
5、刪除某檔案中開頭的#號及後面的空白字元,但要求#號後面必須有空白字元
# sed -r ‘[email protected]^#[[:space:]][email protected]@g‘ /etc/inittab
6、刪除某檔案中以空白字元後面跟#類的行中的開頭的空白字元及#
# sed -r ‘[email protected]^[[:space:]]+#@@g‘ /etc/inittab
7、取出一個檔案路徑的目錄名稱
# echo "/etc/rc.d/" | sed -r ‘[email protected]^(/.*/)[^/]+/[email protected]\[email protected]‘
基名:
# echo "/etc/rc.d/" | sed -r ‘[email protected]^/.*/([^/]+)/[email protected]\[email protected]‘
本文出自 “珞辰的部落格” 部落格,請務必保留此出處http://luochen2015.blog.51cto.com/9772274/1636971
shell編程---檔案測試及特殊變數