gpt4 book ai didi

linux - 如何替换文件中的值

转载 作者:太空宇宙 更新时间:2023-11-04 09:00:06 25 4
gpt4 key购买 nike

我正在编写一个脚本来更改/etc 目录 中文件sysctl.conf 中的几个值

如果变量值小于该值,则应将值更改为低于给定值

例如:

sysctl.conf 文件包含以下几行(括号中的术语是我自己的注释,不在实际文件中):

kernel.shmall = 5194304 (more than 4194304 so it should leave it as it is)
kernel.shmmax = 2147483648 (it is equal to 2147483648 so it should leave it as it is)
kernel.msgmni = 124 (it is less than 1024 so it should alter the value to 1024)

期望输出是

kernel.shmall = 5194304 
kernel.shmmax = 2147483648
kernel.msgmni = 1024

这是我准备在值小于或等于 4194303 时替换 kernel.shmall 的脚本

脚本:

#!/bin/sh
echo `cat /etc/sysctl.conf|fgrep kernel.shmall` | while read kernel.shmall
if [ "kernel.shmall" -le 4194303 ]; then
kernel.shmall = 4194304
fi`

最佳答案

你可以这样做

 sed -i "s|\("kernel.shmall" *= *\).*|\14194304|" /etc/sysctl.conf

同样可以用于其他属性。

另外,如果属性不存在,那么你可以这样做

if grep -o "kernel.shmall" /etc/sysctl.conf > /dev/null
then
oldvalue=$(grep kernel.shmall /etc/sysctl.conf | awk '{ print $3 }')

if [ $oldvalue -lt 4194304 ]
then
sed -i "s|\("kernel.shmall" *= *\).*|\14194304|" /etc/sysctl.conf
fi
else
echo "kernel.shmall=" >> /etc/sysctl.conf
sed -i "s|\("kernel.shmall" *= *\).*|\14194304|" /etc/sysctl.conf
fi

关于linux - 如何替换文件中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23110036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com