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