スクリプトを使用して、既存の値に基づいて/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を適用します。
シェルスクリプトを使用してこれを達成する最も簡単な方法は何ですか?
答え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
。これ#\?
には、行がコメントアウトされ(0または1#)、skelオプションとumaskオプションが指定されていない場合が含まれます。
それ以外の行がない場合は、その行がファイルのsession required pam_mkhomedir.so skel=/etc/skel/ umask=0022
末尾に追加されます。
./script.sh /etc/pam.d/common-session
$1
ファイルパスを変更すると、パラメータを使用または使用せずにスクリプトを呼び出すことができます。