使用来自另一个脚本输出的选项菜单创建bash脚本

时间:2013-08-12 14:05:24

标签: bash menu

请原谅我,如果这很简单,但我不是程序员,所以我很难说出什么是容易的,什么是难的。

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

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

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

这是我的工作原理,但仅限于“info customername”产生的第一个结果:

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

这是菜单上的东西,我很难搞清楚。我希望这很清楚,但我再次对这些东西很愚蠢,所以我可能留下了一些重要的东西。感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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