gpt4 book ai didi

linux - 此 shell 脚本中需要修改的位置以添加文件中不存在的值

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

我正在编写 shell 脚本来检查“kernel.shmall”值。脚本的目的是如果 kernel.shmall 小于 4194304 那么它应该将值修改为 4194304。如果 kernel.shmall 不存在文件/etc/system.conf 那么它应该将值添加到文件 kernel.shmall=4194304

if grep -o "kernel.shmall" /emblocal/sysctl.conf > /dev/null
then
oldvalue=$(grep -v '^#' /emblocal/sysctl.conf|grep kernel.shmall|sed 's/=/ /g'| awk '{ print $2}')

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

如果值小于 4194304,脚本会运行,但如果不存在,则不会添加“kernel.shmall=4194304”。你能帮我完成这件事吗?

最佳答案

试试这个:

#!/bin/sh
oldvalue=$(sed '/^#/d;/kernel\.shmall/!d;s/^[^=]*= *//' /emblocal/sysctl.conf)
if [ "$oldvalue" ]; then
[ $oldvalue -lt 4194304 ] &&
sed -i '/kernel\.shmall/{s/=.*/= 4194304/}' /emblocal/sysctl.conf
else
echo "kernel.shmall = 4194304" >> /emblocal/sysctl.conf
fi

或者在 AWK 中更简洁:

f=$(mktemp)
awk -vn=kernel.shmall '
function max(a,b) {return a<b?b:a}
{
if ($1 == n) oldval = $3
else print
}
END {print n, "=", max(oldval, 4194304)}
' /emblocal/sysctl.conf > "$f" && cp "$f" /emblocal/sysctl.conf
rm "$f"

关于linux - 此 shell 脚本中需要修改的位置以添加文件中不存在的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23245450/

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