存在する場合は、既存の構成ファイルにパラメーターを追加します。

存在する場合は、既存の構成ファイルにパラメーターを追加します。

スクリプトを使用して、既存の値に基づいて/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を適用します。

シェルスクリプトを使用してこれを達成する最も簡単な方法は何ですか?

答え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.solineに変更します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ファイルパスを変更すると、パラメータを使用または使用せずにスクリプトを呼び出すことができます。

関連情報