我想使用脚本根据现有值修改 /etc/pam.d/common-session 文件:
- 如果
session required pam_mkhomedir.so
存在,则添加skel=/etc/skel/ umask=0022
- 如果不存在,则添加整行
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
- 如果有注释 (#),则取消注释(并应用规则 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
文件路径,则可以调用有参数或无参数的脚本