我有一个脚本来获取 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