shell 脚本中带参数的命令行选项

shell 脚本中带参数的命令行选项

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

相关内容