[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: script vs variaveis vs aspas



Em 25/06/07, Bruno Buys<bruno.grupos@gmail.com> escreveu:
Denis wrote:
> Galera, montei um script para criar usuarios, ja setando algumas
> opçoes de cota e pastas.
>
> o problema é na hora que passo a variavel do nome do cabra para o useradd
>
> ele fala too arguments.
>
> isso pq eu não consigo fazer uma maneira do script colocar as aspas
> onde quero
>
>
> Este é o pedaço onde está o bendito useradd:
>
> testa_resp ()
>        {
>        echo "Criando login para aluno..."
>        sleep 1
>        echo -n "Informe o login do professor ao qual o aluno sera
> vinculado: "
>        read responsavel
>        testa_resp=`cat /etc/group |cut -d ":" -f 1 |grep $responsavel`
>        if [ "$responsavel" = "$testa_resp" ];
>                then
>                /usr/sbin/useradd $username -s /bin/bash -m -d
> /home/$responsavel/$username -c "$nome" -g $responsavel
>                /bin/mkdir /data/$responsavel/$username
>                /bin/chown $username.$responsavel
> /data/$responsavel/$username
>                else
>        echo "Professor Invalido"
>        sleep 1
>        testa_resp
>        fi
>        }
>
>
> Já tenteni informar o nome "teste da silva"
>
> ou ler a variavel
> "$nome" ;
> " ' " $nome " ' " ;
> " " $nome " " ;
> ' " $nome " ' ;
>
> e diversas combinações.
>
> Ou eu recebo erro por excesso de argumentos do useradd ou consigo
> colocar o usuário junto com as aspas para dentro do passwd.
>
> Alguem sabe como tenho que fazer para que ele interprete o comando assim:
>
> /usr/sbin/useradd $username -s /bin/bash -m -d
> /home/$responsavel/$username -c "$nome" -g $responsavel
>
> /usr/sbin/useradd user_teste -s /bin/bash -m -d
> /home/resp_teste/user_teste -c "user teste" -g resp_teste
>
>
> valeu.
>
>

Olhando só a função fica mais difícil, mas acho que é porque você chama
o useradd com muitos nomes de alunos. Quantos nomes tem em '$username'?
Nao dá pra fazer isso dentro de um loop, tipo

Bom dia Bruno. Na verdade é informado um nome de aluno de cada vez o
problema está sendo pq o nome do aluno contém espaços.

por exemplo no useradd fica assim o comando:

/usr/sbin/useradd user_teste -s /bin/bash -m -d
/home/resp_teste/user_teste -c user teste -g resp_teste

( sem as aspas no -c )

abaixo segue o script inteiro:

#!/bin/bash
#script para criacao de usuarios SGI ALTIX 4700 UFABC - Autor: Denis
Anjos - denis.anjos@ufabc.edu.br
/usr/bin/clear
echo "Script para criacao de usuarios SGI ALTIX 4700 - UFABC"
echo ""
echo -n "Informe o nome completo do usuario: "
read nome
nome='"'$nome'"'
echo $nome
echo -n "Informe um login para o usuario: "
read username
menu ()
{
echo -n "Digite (P|p) para professor (A|a) para aluno: "
read tipo
case $tipo in
(p|P)
echo "Criando login para professor..."
sleep 1
/sbin/groupadd $username
/usr/sbin/useradd/$username -s /bin/bash -m -d
/home/$username/$username -c '"'$nome'"' -g $username
/bin/mkdir /data/$username/$username
/bin/chown $username.$username /data/$username
ajusta_cota ()
{
echo ""
###HOME###
echo -n "informe em GB a cota do professor $username para HOME: "
read homesoft
echo -n "Informe o espaco em GB que pode ser alocado ALEM da cota
durante 7 dias para o professor $username: "
read homehard
homehard=`expr $homesoft + $homehard`


###DATA###
echo ""
echo -n "informe em GB a cota do professor $username para DATA: "
read datasoft
echo -n "Informe o espaco em GB que pode ser alocado ALEM da cota
durante 7 dias para o professor $username: "
read datahard
datahard=`expr $datasoft + $datahard`

#define a cota do professor em /home
/usr/sbin/xfs_quota -xc "limit bsoft=$homesoft"G" bhard=$homehard"G"
-g $username" /home

#define a cota do professor em /data
/usr/sbin/xfs_quota -xc "limit bsoft=$datasoft"G" bhard=$datahard"G"
-g $username" /data
}
ajusta_cota
exit
;;
(a|A)
testa_resp ()
       {
       echo "Criando login para aluno..."
       sleep 1
       echo -n "Informe o login do professor ao qual o aluno sera vinculado: "
       read responsavel
       testa_resp=`cat /etc/group |cut -d ":" -f 1 |grep $responsavel`
       if [ "$responsavel" = "$testa_resp" ];
               then
               /usr/sbin/useradd $username -s /bin/bash -m -d
/home/$responsavel/$username -c "$nome" -g $responsavel
               /bin/mkdir /data/$responsavel/$username
               /bin/chown $username.$responsavel /data/$responsavel/$username
               else
       echo "Professor Invalido"
       sleep 1
       testa_resp
       fi
       }
testa_resp
exit
;;
esac
menu
}
menu




for arg in $alunos ; do

useradd $alunos etc etc

done

?

Outra coisa: pra que a linha testa_resp, logo antes do 'fi'? Se você tá
chamando a função testa_resp, tem que ser fora da funcao, se quer zerar
a variável, tem que chamar 'testa_resp='. Sugiro trocar o nome de uma
das duas, pra não ficar ambiguo.
A função testa_resp é chamada de novo no else do testa_resp, pois se o
usuário informar o nome de um responsavel que não existe no sistema, o
script devolve um erro e pede para ele informar de novo.




--
To UNSUBSCRIBE, email to debian-user-portuguese-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org





Reply to: