쉘 스크립트의 매개변수가 있는 명령줄 옵션

쉘 스크립트의 매개변수가 있는 명령줄 옵션

LDAP 사용자 이름, 이메일 및 휴대폰 번호를 가져오는 스크립트가 있습니다.

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

다음은 스크립트의 출력입니다.

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

이제 비대화형 모드에서 실행할 수 있도록 스크립트를 수정하고 싶습니다. 예를 들면 다음과 같습니다.

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

또는:

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

또는:

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

어떻게 해야 하나요? 나는 다음을 시도했다:

#!/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;

다음은 스크립트의 출력입니다.

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

위와 비슷한 것이 괜찮을 것이라고 생각합니다. 그러나 루프를 수행하는 방법을 잘 모르겠습니다.

답변1

getopts("s" 참고)를 사용하여 명령줄 인수를 얻으려면 다음을 수행할 수 있습니다.

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

getopts는 2개의 인수, 즉 찾아야 할 옵션을 나타내는 문자열과 찾은 현재 옵션을 저장할 변수 이름을 사용합니다. 찾아야 할 옵션을 알려주는 문자열은 짧은 옵션 문자이며, 뒤에 콜론이 오면 옵션에 플래그를 설정하는 것이 아니라 인수가 필요하다는 의미입니다.

답변2

이것은 매우 기본적인 것입니다. 이름을 매개변수로 전달할 수 있습니다.

#!/bin/bash

UNIXID=$1

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

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


#./lsearch in15004

givenName: Mr. Xyz

mail: [email protected]

mobile: 9xxxxxxxx1

관련 정보