nextsysid.sh: Shell Script para Determinar o Próximo ID de Sistema

Algumas vezes precisamos criar usuários e/ou grupos de sistema, os quais geralmente são IDs abaixo de 1000 para serem usuários de serviços. Abaixo vai o código fonte e exemplos de uso.
#!/bin/bash 

# nextsysid.sh 

# Script para gerar o próximo ID de sistema vago 

# Elaborado por Juliano Atanazio
# 17/04/2011 

if [ -f /etc/adduser.conf ]; then
    source /etc/adduser.conf 

# Faz a leitura do arquivo onde contém variáveis sobre
# quais devem ser os últimos IDs de usuários e grupos
# Obs.: Debian e derivados

else

# Para Red Hat e derivados

    FIRST_SYSTEM_UID='1'
    LAST_SYSTEM_UID='499'    
    FIRST_SYSTEM_GID='1'
    LAST_SYSTEM_GID='499'
fi

case $1 in
# Opção para o próximo ID de usuário de sistema
     'user')                    
# Primeiro ID de usuário de sistema
        ID_MIN=$FIRST_SYSTEM_UID    
# Último ID de usuário de sistema
        ID_MAX=$LAST_SYSTEM_UID; 
# Arquivo de IDs para usuários  
        FILE='/etc/passwd';        
        ;;

# Opção para o próximo ID de grupo de sistema 
    'group')                

# Primeiro ID de grupo de sistema
        ID_MIN=$FIRST_SYSTEM_GID    
# Último ID de grupo de sistema
         ID_MAX=$LAST_SYSTEM_GID; 

# Arquivo de IDs para grupos   
        FILE='/etc/group';        
        ;;
    *)
# Exibe mensagem sobre parâmetros corretos
         echo -e "$0 {user|group}";    
        exit 1;
        ;;
esac 

# ----- Extrai todos IDs de sistema do arquivo -----

IDs=$(cat $FILE | cut -f3 -d: | sort -n )            

SYS_IDs=""

for ID in $IDs; do
    if [ $ID -ge $ID_MIN ] && [ $ID -le $ID_MAX ]; then
        SYS_IDs="$SYS_IDs $ID"
    fi
done

# ----- Extrai o próximo ID vago de sistema -----

i=$ID_MIN
NEXT_ID=$(($ID_MIN+1))

for SYS_ID in $SYS_IDs; do

    if [ $SYS_ID -ne $i ]; then
        break;    
    fi

    let i++;

    NEXT_ID=$i

done

# Imprime na tela o próximo ID
echo $NEXT_ID
Salve o arquivo com o nome nextsysid.sh e dê a permissão de execução: chmod +x nextsysid.sh Exemplos de Uso Próximo ID disponível para usuário de sistema ./nextsysid.sh user 114 Próximo ID disponível para grupo de sistema ./nextsysid.sh group 126 Até a próxima dica!!! :)

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.