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 つの引数、つまり検索するオプションを表す文字列と、検索した現在のオプションを格納する変数名を使用します。検索するオプションを示す文字列は短いオプション文字で、後にコロンが続く場合はオプションにフラグを設定するのではなく、引数が必要であることを意味します。