私は基本的に "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です。