Linux下使用脚本读取参数修改配置文件(一)

简介: 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脚本相应的配置文件)
  • 文件目录参考:
.
└── cfg_demo
    ├── cfg(修改目标目录)
    │   ├── bak_target.t(备份的目标文件)
    │   └── target.t(目标文件)
    └── cmd(shell脚本目录)
        ├── cmd.cfg(shell脚本对应的配置文件)
        └── cmd.sh(shell脚本)
3 directories, 4 files


清空目标文件并将新内容写入文件并保存。

  • 用到的命令有
:>${target_file}; #清空目标文件内容
cat ${cmd_cfg} > ${target_file} #使用cat命令将配置文件内容取出重定向到目标文件中


  • 当前目标文件target.t文件中的内容如下:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto eno1
iface eno1 inet dhcp
pre-up ifconfig eno1:0 192.168.0.139
up ifconfig eno1:0 192.168.0.139
auto lo
iface lo inet loopback


  • 执行如下shell命令情况目标文件并将设置好的内容填充进空文件中并保存。
#!/bin/bash
target_file=../cfg/target.t
echo "start clear target file message!"
:>${target_file}; #清空目标文件内容
echo "clear end."
echo "start input message to target file."
# 逐行将内容插入目标文件中
echo "auto eno1" >> ${target_file};
echo "iface eno1 inet dhcp" >> ${target_file};
echo "pre-up ifconfig eno1:0 192.168.0.111" >> ${target_file};
echo "up ifconfig eno1:0 192.168.0.111" >> ${target_file};
echo "new file message input end."
echo "please look over target file"

20191220223621564.png

  • 从上面打印信息及最后查看的结果能看出是可以这么做的,但是有点蠢啊。
  • 而且内容是写死的。顺便实现了将cmd.cfg的内容放到目标文件中的功能。脚本内容如下:
  • 使用cat命令将配置文件内容取出重定向到目标文件中
#!/bin/bash
target_file=../cfg/target.t
cmd_cfg=./cmd.cfg
echo "start clear target file message!"
:>${target_file};
echo "clear end."
echo "start input message to target file."
cat ${cmd_cfg} > ${target_file} #使用cat命令将配置文件内容取出重定向到目标文件中
echo "please look over target file"

20191220224841396.png

向目标文件中追加新的内容并保存。

  • 追加内容只需要使用>>追加重定向即可。
  • shell脚本内容如下:
#!/bin/bash
target_file=../cfg/target.t
cmd_cfg=./cmd.cfg
echo "start append message to target file."
cat ${cmd_cfg} >> ${target_file}  #追加重定向到目标文件
echo "please look over target file"

20191220225248947.png

传参指定修改内容将目标文件中指定内容进行修改并保存。

  • 这个需求就有点难度了,首先需要传递K-V参数给脚本,脚本读取K-V参数对到目标文件中将K对应的参数修改为传递的参数V即可。
  • 此外还有一种可能是传递参数为将指定字符串替换为新的字符串。
  • 针对以上两种情况分别进行两种不同的脚本。

传递K-V参数给脚本进行修改目标文件中的指定V值。

  • 查询目标文件某一行并替换
sed -i "s/^.*${key}.*$/${key}=${value}/" ${target_file}
  • shell脚本接受K-V参数方式:
while getopts ":k:v:" opt
do
    case $opt in
        k)
        echo "参数key的值$OPTARG"
        key=$OPTARG
        ;;
        v)
        echo "参数value的值$OPTARG"
        value=$OPTARG
        ;;
        ?)
        echo "未知参数"
        exit 1;;
    esac
done
echo "参数key的值$key"
echo "参数value的值$value"

2019122023231121.png

  • 将目标文件修改为以下配置文件格式的内容:
serverip=192.168.0.1
serverport=8899
addrip=192.168.0.122
addrport=6666


  • shell脚本内容为:
#!/bin/bash
target_file=../cfg/target.t
cmd_cfg=./cmd.cfg
echo "start append message to target file."
echo "please look over target file"
while getopts ":k:v:" opt
do
    case $opt in
        k)
            echo "参数key的值$OPTARG"
            key=$OPTARG
            ;;
        v)
            echo "参数value的值$OPTARG"
            value=$OPTARG
            ;;
        ?)
            echo "please input"
            echo "./cmd.sh -k key -v value"
            exit 1;;
    esac
done
sed -i "s/^.*${key}.*$/${key}=${value}/" ${target_file}
echo "replace success."

20191220235428169.png

传递old-string和new-string将目标文件中old-string内容进行替换。

  • 使用sed命令:
sed -i "s/$1/$2/g" ${target_file} # 将target_file目标文件中的$1字符串替换成$2字符串
  • 使用方式为
./cmd.sh old-string new-string


  • 脚本内容如下:
#!/bin/bash
target_file=../cfg/target.t
cmd_cfg=./cmd.cfg
echo "start append message to target file."
sed -i "s/$1/$2/g" ${target_file}
echo "please look over target file"

20191220231237384.png

将传递参数修改为一个配置文件,每次执行时默认读取配置文件根据区中的内容修改对应的文件信息。

  • 这里的需求比前一步多了一个读取配置文件中的K-V对的值。只需要循环执行上一步的流程即可。读取K-V对的方式有两种,如下:
•   第一种方式:
IFS='='
while read k v
do
    echo "$k : $v"
done < ${cmd_cfg}


第二种方式:
while read line
do
    k=${line%=*}
    v=${line#*=}
    echo "$k : $v"
done < ${cmd_cfg}


两种方法都可以使用。


执行脚本内容为:


#!/bin/bash
target_file=../cfg/target.t
cmd_cfg=./cmd.cfg
IFS='='
while read k v
do
    echo "$k : $v"
done < ${cmd_cfg}
while read line
do
    key=${line%=*}
    value=${line#*=}
    echo "$key : $value"
    sed -i "s/^.*${key}.*$/${key}=${value}/" ${target_file}
done < ${cmd_cfg}
echo "replace success."

20191221000759321.png

添加条件判断,满足条件时执行5的操作。

  • 条件判断的话只不过是进行一下shell脚本的条件执行语句即可,目前做的是判断当前目录下有没有cmd.cfg文件,如果有的话就读取其中的参数替换目标文件中的对应参数即可。

  • 执行脚本内容如下:


#!/bin/bash
target_file=../cfg/target.t
cmd_cfg=./cmd.cfg
if [ -f ${cmd_cfg} ];then
    echo "cfg file yes."
    while read line
    do
        key=${line%=*}
        value=${line#*=}
        echo "$key : $value"
        sed -i "s/^.*${key}.*$/${key}=${value}/" ${target_file}
    done < ${cmd_cfg}
    echo "replace success."
else
    echo "cfg file is no."
fi

20191221003428180.png


相关文章
|
3月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
205 6
|
1月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
63 1
|
3月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
733 2
|
2月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
36 0
|
3月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
29天前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
75 8
|
29天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
215 6