如何从CLI输出分配CLI变量

时间:2012-07-15 20:52:35

标签: bash variables scripting command-line-interface

如何从CLI中任意提取输出?

在我的具体示例中(但答案通常适用于整体)我尝试使用标准Ubuntu为AWS EC2 / EBS上的NodeJS / MongoDB技术堆栈编写通用部署/扩展脚本服务器操作系统(12.04)。目前,我通过AWS Dashboard控制台手动创建和连接EBS驱动器,但其他一切都应该自动发生,无需SSH进入并执行愚蠢的CLI(尽管最终我想自动创建和附加部件)同样)。

首先,我需要获取要安装的EBS驱动器的所有块lsblk -l的列表。 然后我需要(在第一时间条件下)设置MDADM和LVM,但是他们的命令假定我知道块的名称,例如:

sudo mdadm --create --verbose /dev/md0 --level=10 --chunk=256 --raid-devices=4 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4

等等。这很棒也很容易......如果我是人类通过lsblk的CLI输出读取。但是如何动态地解析/提取和迭代它呢?不知怎的,我需要这样做(伪代码):

$EBS_ARRAY = lsblk -l -list_the_names_of_blocks_not_mounted
sudo mdadm --create --verbose /dev/md0 --level=10 --chunk=256 --raid-devices=EBS_ARRAY.length EBS_ARRAY.join(' ')
...rest of my script here...

你可以很明显地看到我是一个javascript的人,对于如何在没有JSON和非交互式(脚本化)的情况下使用CLI动态工作一无所知。那么......你究竟如何以自动方式从CLI输出中随意提取信息到变量中?

感谢。

1 个答案:

答案 0 :(得分:1)

如果要在bash脚本中解析命令的输出,有几个实用程序,如grepsedawk,以及shell builtins,这有助于操纵琴弦以满足您的需要。

另一方面,您无法在bash脚本中进行GUI编程。对于简单的GUI,如果你在Gnome下,你可以检查zenity

如果必须设计高级GUI,可以考虑使用pythontkinter等编程语言或其他图形库。

如果必须在服务器上运行这些CLI命令,则可以在python中编写应用程序,其中服务器端为cgi / json模块,主要处理语言为javascript / ajax。

顺便说一下,man page并不是那么糟糕,并且参数语法在所有命令中都非常一致。