将参数添加到现有配置文件(如果存在)

将参数添加到现有配置文件(如果存在)

我想使用脚本根据现有值修改 /etc/pam.d/common-session 文件:

  1. 如果session required pam_mkhomedir.so存在,则添加skel=/etc/skel/ umask=0022
  2. 如果不存在,则添加整行session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
  3. 如果有注释 (#),则取消注释(并应用规则 1 和 2)

使用 shell 脚本实现此目的最简单的方法是什么?

答案1

这是 GNU 的解决方案sed。我不知道这是否是最简单的,但我稍微简化了你的逻辑:

#!/bin/bash

if [[ $(grep "session required        pam_mkhomedir.so" $1) ]]
    then  $(sed -i 's/#\?session required        pam_mkhomedir\.so.*/session required        pam_mkhomedir.so skel=\/etc\/skel\/ umask=0022/'  $1)
    else $(sed -i '$ a session required        pam_mkhomedir.so skel=/etc/skel/ umask=0022' $1)

fi

将包含的行更改session required pam_mkhomedir.so为 line session required pam_mkhomedir.so skel=/etc/skel/ umask=0022。这涵盖了该行被注释(#\?零或一个 #)以及未指定 skel 和 umask 选项的情况。

否则,如果没有这样的行,则将行追加session required pam_mkhomedir.so skel=/etc/skel/ umask=0022到文件末尾。

./script.sh /etc/pam.d/common-session如果更改$1文件路径,则可以调用有参数或无参数的脚本

相关内容