概述
清空目标檔案并将新内容寫入檔案并儲存。
向目标檔案中追加新的内容并儲存。
傳參指定修改内容将目标檔案中指定内容進行修改并儲存。
傳遞K-V參數給腳本進行修改目标檔案中的指定V值。
傳遞old-string和new-string将目标檔案中old-string内容進行替換。
将傳遞參數修改為一個配置檔案,每次執行時預設讀取配置檔案根據區中的内容修改對應的檔案資訊。
添加條件判斷,滿足條件時執行5的操作。
補充知識
條件判斷
整數比較符
字元串比較符
檔案測試
布爾運算符
邏輯判斷符
整數運算符
其他運算符
if語句
單分支
多分支
參考連結
在Linux下經常會遇到需要使用腳本來自動修改配置檔案内容的需求,針對這種情況,特别整理了這樣幾種可以使用的方式方法。(以下幾種方式由簡入難)
1、清空目标檔案并将新内容寫入檔案并儲存。
2、向目标檔案中追加新的内容并儲存。
3、傳參指定修改内容将目标檔案中指定内容進行修改并儲存。
4、将傳遞參數修改為一個配置檔案,每次執行時預設讀取配置檔案根據區中的内容修改對應的檔案資訊。
5、添加條件判斷,滿足條件時執行4的操作。
注:下面開始實作上述要求的方式方法,約定以下幾個檔案和檔案名:/cfg/target.t(目标檔案,/cfg為路徑)、/cmd/cmd.sh(執行的shell腳本,/cmd為路徑)、cmd.cfg(執行shell腳本相應的配置檔案)
檔案目錄參考:
用到的指令有
目前目标檔案target.t檔案中的内容如下:
執行如下shell指令情況目标檔案并将設定好的内容填充進空檔案中并儲存。

從上面列印資訊及最後檢視的結果能看出是可以這麼做的,但是有點蠢啊。
而且内容是寫死的。順便實作了将cmd.cfg的内容放到目标檔案中的功能。腳本内容如下:
使用cat指令将配置檔案内容取出重定向到目标檔案中
追加内容隻需要使用>>追加重定向即可。
shell腳本内容如下:
這個需求就有點難度了,首先需要傳遞K-V參數給腳本,腳本讀取K-V參數對到目标檔案中将K對應的參數修改為傳遞的參數V即可。
此外還有一種可能是傳遞參數為将指定字元串替換為新的字元串。
針對以上兩種情況分别進行兩種不同的腳本。
查詢目标檔案某一行并替換
shell腳本接受K-V參數方式:
将目标檔案修改為以下配置檔案格式的内容:
shell腳本内容為:
使用sed指令:
使用方式為
腳本内容如下:
這裡的需求比前一步多了一個讀取配置檔案中的K-V對的值。隻需要循環執行上一步的流程即可。讀取K-V對的方式有兩種,如下:
執行腳本内容為:
條件判斷的話隻不過是進行一下shell腳本的條件執行語句即可,目前做的是判斷目前目錄下有沒有cmd.cfg檔案,如果有的話就讀取其中的參數替換目标檔案中的對應參數即可。
執行腳本内容如下:
表達式
執行個體
[ expression ]
[ 1 -eq 1 ]
[[ expression ]]
[[ 1 -eq 1 ]]
test expression
test 1 -eq 1 ,等同于[]
注意:括号中的表達式前後都有空格,否則會報錯!
比較符
描述
-eq, equal
等于
[ 1 -eq 1 ] 為true
-ne, not equal
不等于
[ 1 -ne 1 ] 為false
-gt, greate than
大于
[ 1 -gt 1 ] 為false
-lt, lesser than
小于
[ 1 -lt 1 ] 為false
-ge, greate or equal
大于或者等于
[ 1 -ge 1 ] 為true
-le, lesser or equal
小于或者等于
[ 1 -le 1 ] 為true
運算符
==
[ “a” == “a” ] 為true
!=
[ “a” != “a” ] 為false
-n
字元串長度不等于 0 為真
VAR1=1;VAR2=””,[ -n “
V
A
R
1
”
]
為
t
r
u
e
,
[
−
n
“
VAR1” ]為 true,[ -n “
VAR1”]為true,[−n“VAR2” ]為 false
-z
字元串長度等于 0 為真
VAR1=1;VAR2=””,[ -z “
f
a
l
s
z
VAR1” ]為false,[ -z “
VAR1”]為false,[−z“VAR2” ]為 true
注意:使用-n 判斷字元串長度時,變量要加雙引号,養成好習慣,字元串比較時都加上雙引号
測試符
-e
檔案或者目錄存在為真
[ -e path ] path 存在為 true
-f
檔案存在為真
[ -f file_path ] 檔案存在為 true
-d
目錄存在為真
[ -d dir_path ] 目錄存在為 true
-r
有讀權限為真
[ -r file_path ]file_path有讀權限為真
-w
有寫權限為真
[ -w file_path ]file_path有寫權限為真
-x
有執行權限為真
[ -x file_path ]file_path有執行權限為真
-s
檔案存在且不為空為真
[-s file_path]file_path存在且不為空為真
!
非關系,條件結果取反
[ ! 1 -eq 2 ]為true
-a
和關系,在[]表達式中使用
[ 1 -eq 1 -a 2 -eq 2 ]為true,兩者都為真才為真
-o
或關系,在[]表達式中使用
[ 1 -eq 1 -o 2 -eq 1 ]為true,兩者有一真則為真
判斷符
&&
邏輯和,在[[]]表達式中或判斷表達式是否為真時使用
[[ 1 -eq 1 && 2 -eq 2 ]]為 true,[ 1 -eq 1 ] && echo ‘true’,如果&&前面的表達式為true則執行後面的
||
邏輯或,在[[]]表達式中或判斷表達式是否為真時使用
[[ 1 -eq 1
+
加法
–
減法
*
乘法
/
除法
%
取餘
運算表達式
$(())
$((1+1))
$[]
指令
let
指派并運算
let x++;echo $x 每執行一次 x 加 1,let y–;echo $y 每執行一次 y 減 1,let x+=2 每執行一次 x 加 2,let x-=2 每執行一次 x 減 2
expr
乘法*需要\轉義"*"
expr 1 * 2 運算符兩邊必須有空格,expr( 1 + 2) * 2 使用雙括号時要轉義,
執行個體:
執行個體:
sed操作參考:https://www.runoob.com/linux/linux-comm-sed.html
shell判斷語句參考:javascript:void(0)