Opções de linha de comando com argumento no shell script

2

Eu tenho um script para obter o nome de usuário, e-mail e número de celular do ldap:

#!/bin/bash
echo -n "Enter Unix id > "
read UNIXID
ldapsearch -x "(cn=$UNIXID)" | awk '/givenName/||/mobile/||/mail/'

Aqui está a saída do script:

#./lsearch
Enter Unix id > in15004
givenName: Mr. Xyz
mail: [email protected]
mobile: 9xxxxxxxx1

Agora, quero modificar o script para que eu possa executá-lo no modo não interativo, por exemplo:

#./lsearch –i in15004 # (i meand ID)
givenName: Mr. Xyz
mail: [email protected]
mobile: 9xxxxxxxx1

ou:

#./lsearch –n Xyz* # (n means givenName)
givenName: Mr. Xyz
mail: [email protected]
mobile: 9xxxxxxxx1

ou:

./lsearch –e x@*.com # (e means email id)
givenName: Mr. Xyz
mail: [email protected]
mobile: 9xxxxxxxx1

Como posso fazer isso? Eu tentei abaixo:

#!/bin/bash
while getopts "i:" OPTION; do
    case $OPTION in
    i)
        UNIXID=$OPTARG
        ;;
    esac
done
ldapsearch -x "(cn=$UNIXID)" | awk '/givenName/||/mobile/||/mail/'
#ldapsearch -x "(mail=$MAIL)" | awk '/givenName/||/mobile/||/mail/
#ldapsearch -x "(givenName=$NAME)" | awk '/givenName/||/mobile/||/mail/
exit 0;

Aqui está a saída do script:

#./lsearch -i in15004
givenName: Mr. Xyz
mail: [email protected]
mobile: 9xxxxxxxx1

Acho que semelhante como acima fará. Mas não sei como fazer o loop.

    
por SM_IND 17.04.2015 / 14:17

3 respostas

2

Se você quiser usar o getopts (anotado o "s") para obter os argumentos da linha de comando, você pode fazer algo como

while getopts "i:n:e:" OPT; do
    case "$OPT" in
        i)
            # do stuff with the i option
            ID="$OPTARG"
            ;;
        n)
            # do stuff with the n option
            ;;
        e)
            # do stuff with the e option
            ;;
    esac
done

O getopts leva 2 argumentos, uma string dizendo quais opções ele deve procurar e o nome da variável para armazenar a opção atual encontrada. A string para informar quais opções procurar é a letra da opção curta , e se isso for seguido por dois pontos, significa que a opção recebe um argumento, não é apenas um sinalizador definido.

    
por 17.04.2015 / 14:35
0

Isso é bem básico. Você pode passar o nome como um argumento.

#!/bin/bash

UNIXID=$1

ldapsearch -x "(cn=$UNIXID)" | awk '/givenName/||/mobile/||/mail/'

#####################


#./lsearch in15004

givenName: Mr. Xyz

mail: [email protected]

mobile: 9xxxxxxxx1
    
por 17.04.2015 / 14:27
0

Em vez de getopts , você também pode simplesmente usar as variáveis internas do Bash $1 , $2 etc. dentro do seu script. Essas variáveis são atribuídas automaticamente ao primeiro, segundo, etc., passado ao script.

Portanto, se o seu programa for executado com ./lsearch –i in15004 , dentro do script $1 terá o valor -i e $2 o valor in15004 .

O nome do script, neste caso ./lsearch , é atribuído à variável $0 .

Depois, você pode passar essas variáveis para o comando ldapsearch da maneira apropriada.

    
por 17.04.2015 / 14:27