天天看点

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)