我需要编写一个bash脚本来检查apache2配置文件,并更新2个设置(如果存在),或者将其添加(如果不存在)。
我的bash技巧并不出色,但是我知道我需要使用grep来尝试查找文件中的行。但是我不确定如何在文件中找到该行,然后在密钥存在的情况下仅更新值部分。
我需要更新的设置是
ServerTokens Prod
ServerSignature Off
在/etc/apache2/conf-available/security.conf
文件中。
有人能帮忙吗?
答案 0 :(得分:0)
我刚刚有半个小时的空闲时间,以为我会尝试一下。我已经尝试在整个代码中添加注释,但是如果您不确定,可能要对特定位提出问题。
这依赖于sed的-i
选项,我知道并非所有版本的Sed都附带该选项,因此这是一个限制,但应该可以解决。我已经在MacOS Mojave上写了它。
它处理错误的条目,跳过正确的条目,并允许您使用变量轻松地更新文件名和配置选项。还会显示最新状态。
#!/bin/bash -e
# The file on which to perform a "find and replace"
FILE="/etc/apache2/conf-available/security.conf"
# Use grep to find lines containing each required line
CHECK_SERVER_TOKENS=$(grep ^ServerTokens "$FILE")
CHECK_SERVER_SIGNATURE=$(grep ^ServerSignature "$FILE")
# Specify what the good config looks like. This will be used in the find and replace.
TOKENCONFIG="ServerTokens Prod"
SIGNATURECONFIG="ServerSignature Off"
# If the grep above found no results, add the config in.
if [ -z "$CHECK_SERVER_TOKENS" ]; then
echo "$TOKENCONFIG" >> "$FILE"
# If the grep above contains a result but it does not match desired config, replace it with desired config.
elif [ "$CHECK_SERVER_TOKENS" != "$TOKENCONFIG" ]; then
# Use sed to "find and replace" wrong config, with desired config
sed -i 's/'"$CHECK_SERVER_TOKENS"'/'"$TOKENCONFIG"'/g' "$FILE"
fi
# If the grep above found no results, add the config in
if [ -z "$CHECK_SERVER_SIGNATURE" ]; then
echo "$SIGNATURECONFIG" >> "$FILE"
# If the grep above contains a result but it does not match desired config, replace it with desired config.
elif [ "$CHECK_SERVER_SIGNATURE" != "$SIGNATURECONFIG" ]; then
# Use sed to "find and replace" wrong config, with desired config
sed -i 's/'"$CHECK_SERVER_SIGNATURE"'/'"$SIGNATURECONFIG"'/g' "$FILE"
fi
service apache2 restart