Portál AbcLinuxu, 29. prosince 2025 17:15
Díky, zdraví
Ltb
adduser tohle dela za tebe...
#!/bin/bash
while true; do
echo -n "Enter login name: "
read LOGNAME
LEN=`echo "$LOGNAME" | wc -c`
if [ "$LEN" -gt 8 ] ; then
echo Name too long
continue
fi
if echo "$LOGNAME" | grep [^a-z]; then
echo Only small letters allowed
continue
fi
break
done
_UID=`tail -1 /etc/passwd |awk -F : '{print $3 + 1}'`
echo -n "Enter UID: "
read _UIDOK
if [ "$_UIDOK" = "" ] ; then
_UIDOK=$_UID
elif [ "`grep $_UIDOK /etc/passwd | awk -F : '{print $3}'`" = "" ] ; then
_UIDOK=$_UID
else
echo "ERROR: UID in use"
exit 1
fi
_GID=`grep users /etc/group |awk -F : '{print $3}'`
echo -n "Enter GID: "
read _GIDOK
if [ "$_GIDOK" = "" ]; then
_GIDOK=$_GID
elif [ "`grep $_GIDOK /etc/group`" = "" ] ; then
echo "ERROR: Group $_GIDOK does not exist"
exit 1
fi
echo -n "Enter home directory: [/home/$LOGNAME] "
read _HOME
if [ "$_HOME" = "" ]; then
_HOME="/home/$LOGNAME"
fi
echo -n "Enter login shell: [/bin/bash] "
read _SHELL
if [ "$_SHELL" = "" ]; then
_SHELL=/bin/bash
fi
if [ ! \( -x $_SHELL \) ] ; then
echo Shell does not exist or is not executable
exit 1
fi
echo -n "Enter real name: "
read _REALNAME
echo
echo This is the information you entered:
echo
echo User ID is: $_UIDOK
echo Group ID is: $_GIDOK
echo Home is: $_HOME
echo Login shell is: $_SHELL
echo Real name is: $_REALNAME
echo
echo /etc/passwd entry will be:
echo $LOGNAME:???:$_UIDOK:$_GIDOK:$_REALNAME:$_HOME:$_SHELL
echo
echo -n "Is this correct? (y/n) "
read _verify
if [ "$_verify" = n ]; then
echo Exiting ...
exit 1
else
echo "Adding user $LOGNAME to system"
# useradd -u $_UIDOK -g $_GIDOK -d $_HOME -s $_SHELL -c "$_REALNAME" $LOGNAME
# cp -r /etc/skel $_HOME
# chown -R $_UIDOK:$_GIDOK $_HOME
# passwd $LOGNAME
fi
userid.sh:
#!/bin/bash
if [ $# != 1 ] ; then
echo Usage: `basename $0` username
exit 1
fi
_UID=`grep -F -w $1 /etc/passwd | awk -F : '{print $3}'`
if [ "$_UID" = "" ] ; then
echo Error: User $1 not found
else
echo User $1 has UID=$_UID
fi
tak aby Vám to za to stálo..
) nakonec vzniknul skript, který odpovídá zadání viz. příspěvek úplně nahoře.
#!/bin/bash
# pridani noveho uzivatele (mensi uzivatelska nadstavba nad prikaz "useradd")
echo
echo " Pridani noveho uzivatele do systemu (pouze Enter -> predcasne ukonceni)"
echo
# jmeno
while [ "$xJmeno" == "" ]; do
echo -n " Zadej jmeno pro noveho uzivatele : "; read xJmeno
# nic nezadano -> ukonceni skriptu
[ "$xJmeno" == "" ] && { echo " ! Predcasne koncim skript ..."; exit; }
# kontrola, zda zadany uzivatel jiz existuje (hleda prvni retezec od zacatku radku do prvni dvojtecky)
if grep "^$xJmeno:" /etc/passwd > /dev/null; then
echo " Uzivatel \"$xJmeno\" jiz existuje, zadej jine jmeno!"
xJmeno=""
fi
done
# Nasledujici akci - zjisteni a urceni posledniho pouziteho UID zvyseneho o 1
# dela sam prikaz useradd, zde to ale udelame rucne
# Predpokladame, ze na poslednim radku je posledni platny uzivatel :
# z posledniho radku /etc/passwd nacteme UID (3 polozka mezi : ) a zvysime ji o 1
xUID="$[$(sed -n "$ s#^[^:]*:[^:]*:\([0-9]\+\):.*#\1#p" /etc/passwd) + 1]"
# GID
while [ "$xGID" == "" ]; do
# najde doporucene GID pro skupinu users
x="$(sed -n "/^users:/ s#^[^:]*:[^:]*:\([0-9]\+\):.*#(doporucuji: \1 pro skupinu users) #p" /etc/group)"
echo -n " Zadej GID $x: "; read xGID
# nic nezadano -> ukonceni skriptu
[ "$xGID" == "" ] && { echo " ! Predcasne koncim skript ..."; exit; }
# kontrola, zda skupina existuje (hleda 3 retezec od zacatku radku, polozky jsou oddelene : )
if ! grep "^[^:]*:[^:]*:$xGID:" /etc/group > /dev/null; then
echo " Skupina s GID=$xGID neexistuje, musis zadat nejakou platnou:"
sed -n "s#^\([^:]*\):[^:]*:\([0-9]\+\):.*#GID=\2 \t \1#p" /etc/group # vypise seznam skupin
xGID=""
fi
done
# login shell
while [ "$xShell" == "" ]; do
echo -n " Zadej login shell (1=/bin/bash) : "; read xShell
# nic nezadano -> ukonceni skriptu
[ "$xShell" == "" ] && { echo " ! Predcasne koncim skript ..."; exit; }
# preddefinovany shell
[ "$xShell" == "1" ] && xShell="/bin/bash"
# kontrola na existenci a spustitelnost souboru (shellu)
[ -x "$xShell" ] || { echo " Zadany shell \"$xShell\" neni platny (neexistuje, nebo neni spustitelny) !"; xShell=""; }
done
echo
echo " Shrnuti:"
echo " Jmeno : $xJmeno"
echo " UID : $xUID"
echo " GID : $xGID"
echo " Login shell : $xShell"
echo
echo -n " Pridat tohoto noveho uzivatele do systemu ? Ano=a : "; read x
echo
if [ "$x" == "a" ]; then
# pridani uzivatele; pokud se zdari, jeste nastavit heslo
if useradd -u $xUID -g $xGID -G $xGID -m -s $xShell $xJmeno; then
# prikaz useradd zalozi noveho uzivatele, nastavi mu UID, GID (a prida ho do teto skupiny), nastavi
# mu shell, vytvori HOME adresar, nakopipruje do nej vychozi soubory a nastavi vlastnika,
# takze nasledujici prikazy jsou jiz zbytecne (viz. man useradd):
# cp -r /etc/skel "/home/$xJmeno" # nakopirovani zakladnich souboru do dom.adresare
# chown -R $xUID:$xGID "/home/$xJmeno" # nastavi vlastnika
echo " Uzivatel \"$xJmeno\" pridan do systemu: useradd -u $xUID -g $xGID -G $xGID -m -s $xShell $xJmeno"
echo " Nyni je nutne mu jeste nastavit heslo:"
passwd $xJmeno
fi
else
echo " Koncim ... Uzivatel \"$xJmeno\" nepridan do systemu !"
fi
Mějte se fajn,
Ltb
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.