0

如果这非常简单,请原谅我,但我不是程序员,所以我很难分辨什么容易,什么难。

我有一个 bash 脚本,我使用(其他人编写)来查找内部客户数据,我基本上在其中运行“info customername”,它会在我们的内部客户数据库中搜索与该客户名称匹配的所有客户记录,并使用他们的帐户输出一个列表数字(都具有相同的前缀 11111xxxxxxxx),格式为“Sample Customer - 111119382818873”。

我们有另一个 bash 脚本,您可以在其中输入“extraininfo 11111xxxxxxxx”,我们从他们的帐户中获取明文数据,我们将其用于许多对我们很重要的事情。

缺少的功能是“extraininfo”不能按名称搜索,只能按数字搜索。所以我想弥补这个差距。理想情况下,我会输入“extraininfo customername”,它会使用“info customername”运行搜索,生成结果列表作为菜单,让我选择我的意思的客户,然后运行“extraininfo 11111xxxxxxxxx”命令那个客户。如果只有一个匹配项,它将自动正确运行 extrainfo 命令。

这是我所拥有的,但仅适用于“info customername”生成的第一个结果:

#!/bin/bash
key=`/usr/local/bin/info $1 | grep 11111 | awk '{print $NF}'`
/usr/local/bin/extrainfo $key

这是我很难弄清楚的菜单内容。我希望这很清楚,但同样,我对这些东西非常愚蠢,所以我可能遗漏了一些重要的东西。谢谢。

4

2 回答 2

1

这可能对您有用:

#!/bin/bash

# Set the prompt for the select command
PS3="Type a number or 'q' to quit: "

# Create a list of customer names and numbers (fill gaps with underscores)
keys=$(/usr/local/bin/info $1 | sed 's/ /_/g')

# Show a menu and ask for input.
select key in $keys; do
    if [ -n "$key" ]; then
        /usr/local/bin/extrainfo $(sed 's/.*_11111/11111/' <<<"$key")
    fi
    break
done
于 2013-08-12T17:59:52.477 回答
0

基本上,此脚本读取所有客户信息,找到所有带有客户编号前缀的行,并将其加载到 search.txt 中。然后它显示前面有行号的文件,等待你选择一个行号,然后去掉客户名和客户id前面的空格。最后,它只使用客户 ID 运行我的其他脚本。它很hacky但很实用。

#!/bin/bash
/usr/local/bin/info $1 | grep 11111 > search.txt
cat -n search.txt
read num
key=`sed -n ${num}p search.txt | awk '{print $NF}'`
/usr/local/bin/extrainfo $key
于 2013-08-13T12:44:59.633 回答