「useradd」で対話的にユーザーを追加してみました。

「useradd」で対話的にユーザーを追加してみました。

私は基本的に "useradd"をインタラクティブに使用し、オプションを選択できる簡単なスクリプトを作成したいと思います。

特定の目的のオプションをインタラクティブに定義するか、次の利用可能な設定またはデフォルト設定に設定しようとします。

私が持っている主な問題は、グループIDとグループなどで次に利用可能な値を取得する方法です。

ホームディレクトリとシェルのプリセットを設定できると仮定していますが、これらの変数の定数を設定する以外に、あまり無差別な方法があるかどうかを調べたいと思います。

これまで私はこれをしました:

#!/bin/bash
# Script to add a user to Linux system

if [ $(id -u) -eq 0 ]; then
    read -p "Enter username : " username
    read -p "Enter password : " password
    read -p "Enter group id or [default to next available]: " gid
    read -p "Enter additional groups or [default to next available]: " group
    read -p "Enter home directory or [default to next available]: " hdir
    read -p "Enter desired shell or [default to next available]: " difshell

    egrep "^$username" /etc/passwd >/dev/null
    if [ $? -eq 0 ]; then
        echo "$username exists!"
        exit 1
    else
        pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
        useradd -p$pass -g$gid -G$group -d$hdir -s$difshell $username
        [ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"
    fi
else
    echo "Only root may add a user to the system"
    exit 2
fi

答え1

$HOME変数と$SHELL変数について、「次の使用可能」が何を意味するのかわかりません。既定値に設定したもの:/home/USERNAMEまたは/bin/bash何でも。の場合、$HOMEディレクトリが存在しないことを確認してください([ -e "/home/$username" ] && echo "Directory exists")。

グループの場合は、使用可能なグループを一覧表示し、次のグループを選択します。これDebian グループポリシー(Debianに限定されていないと思います。)一般ユーザーのGIDは1000から5999の間で指定されています。したがって、やるべきことは、解析を実行し、範囲/etc/passwd内の既存のグループを印刷してから1つを追加することだけです。

grp=$(awk -F: '$4>=1000 && $4<6000{print $4+1}' /etc/passwd | sort -n | tail -n1)

4番目の区切り文字フィールドの値が1000から6000の間の場合、このawkコマンドはそのフィールドの値に:1を加えた値を出力します。その後、整列して緯度線を維持します。結果は現在最大のGIDより1大きいGIDです。

関連情報