天天看點

Linux下使用腳本讀取參數修改配置檔案

概述

清空目标檔案并将新内容寫入檔案并儲存。

向目标檔案中追加新的内容并儲存。

傳參指定修改内容将目标檔案中指定内容進行修改并儲存。

傳遞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指令情況目标檔案并将設定好的内容填充進空檔案中并儲存。

Linux下使用腳本讀取參數修改配置檔案

從上面列印資訊及最後檢視的結果能看出是可以這麼做的,但是有點蠢啊。

而且内容是寫死的。順便實作了将cmd.cfg的内容放到目标檔案中的功能。腳本内容如下:

使用cat指令将配置檔案内容取出重定向到目标檔案中

Linux下使用腳本讀取參數修改配置檔案

追加内容隻需要使用>>追加重定向即可。

shell腳本内容如下:

Linux下使用腳本讀取參數修改配置檔案

這個需求就有點難度了,首先需要傳遞K-V參數給腳本,腳本讀取K-V參數對到目标檔案中将K對應的參數修改為傳遞的參數V即可。

此外還有一種可能是傳遞參數為将指定字元串替換為新的字元串。

針對以上兩種情況分别進行兩種不同的腳本。

查詢目标檔案某一行并替換

shell腳本接受K-V參數方式:

Linux下使用腳本讀取參數修改配置檔案

将目标檔案修改為以下配置檔案格式的内容:

shell腳本内容為:

Linux下使用腳本讀取參數修改配置檔案

使用sed指令:

使用方式為

腳本内容如下:

Linux下使用腳本讀取參數修改配置檔案

這裡的需求比前一步多了一個讀取配置檔案中的K-V對的值。隻需要循環執行上一步的流程即可。讀取K-V對的方式有兩種,如下:

執行腳本内容為:

Linux下使用腳本讀取參數修改配置檔案

條件判斷的話隻不過是進行一下shell腳本的條件執行語句即可,目前做的是判斷目前目錄下有沒有cmd.cfg檔案,如果有的話就讀取其中的參數替換目标檔案中的對應參數即可。

執行腳本内容如下:

Linux下使用腳本讀取參數修改配置檔案

表達式

執行個體

[ 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)