Skript pro UID podruhe...

Pavel Prchal pavel na pelhrim.cz
Pátek Září 22 10:40:00 CEST 2000


Skleroza zije....

#!/bin/bash
##
# Skript pro zjisteni prvniho volneho UID ze skupiny uzivatelu
# Autor: Pavel Prchal (pavel na pelhrim.cz)
# Pouziti: ./getfreeuid jmeno_skupiny
# Pocita se s tim, ze uzivatele, ve kterych je volne UID hledano,
# maji stejnou skupinu, t.j:
## /etc/passwd
# a:x:200:200:::
# b:x:201:200:::
# c:x:202:200:::
## /etc/group
# somegrp:x:200:
##
# zjistene volne UID vypise na standartni vystup. Pokud skupina neexistuje,
# vypise "err"
############################################################################


if [ "$1" = "" ]; then
  echo "Not enough parameters"
  echo "ussage: ./getfreeuid [group_name]"
  exit
fi


# Testni, jestli skupina existuje
foundGroup=`cat /etc/group | grep "^$1:" | cut -f1 -d":"`
if [ "$foundGroup" != "$1" ]; then
  echo "err"
  exit
else
  # Ze jmena skupiny vypreparuj jeji cislo
  foundGID=`cat /etc/group | grep "^$1:" | cut -f3 -d":"`
fi

# Cislo skupiny predej AWKu jako jeho promennou GIDSTART
cat /etc/passwd | awk \
-v GIDSTART="$foundGID" \
'BEGIN{
  FS=":";
  UIDSTART=GIDSTART;  /* od jakeho UID se ma zacit prohledavat */
}

{
  /* Napln pole ve stylu: uidArr[uid]=logname  (pouze pro danou skupinu) */
  if($4==GIDSTART)
    uidArr[$3]=$1;
}

END{
  /* ------------------------------ */
  /* Najdi prvni nejnizsi volne UID */
  /* ------------------------------ */
  uid=UIDSTART;
  uidFound=1;

  while(uidFound){
    uidFound=0;

    for(i in uidArr){
      if(uid == i){   /* UID jiz existuje, zvys a prerus zbytecnou smycku */
        uidFound=1;
 uid++;
        break;
      }
    }
  }
  print uid;
}'






Další informace o konferenci Linux