将一个脚本与另一个脚本组织在一起

将一个脚本与另一个脚本组织在一起

如果我有一个执行以下操作的脚本

    [alice]$ math
    Enter a number: 5

    Number squared: 25
    Number divided: 1
    Number to power of 3: 125

我想编写另一个脚本,将数学脚本的输出组织到一个表中,但也可以采用多个参数并且不显示“除数”。例如

   [alice]$ newprogram 5 10

   *
   *Number    squared    power of 3
    5         25         125
    10        100        1000     

此外,数学脚本位于/home/alice,新程序将位于/home/user。我该如何处理这个问题?

答案1

看我的回答关于如何将参数传递到现有脚本中的信息,请参阅您之前的问题。解析这一个的输出将比上一个更难。

编写新版本的脚本要简单得多。解析这样的废话是一个主要的 PITA。

这是一个可以做到这一点的版本,并且不会重复打印多余输出(如标题)的原始错误。

#! /bin/bash

for i in "$@" ;  do
   printf "%i\t%i\t%i\n" $i $(($i * $i)) $(($i * $i *$i))
done

-v如果您使用(verbose) 选项,这里是一个可以选择打印标题的版本:

#! /bin/bash

verbose=0

while getopts "v" opt ; do
  case "$opt" in
      v) verbose=1 ;;
   esac
done

shift "$((OPTIND-1))"

[ "$verbose" = "1" ] && printf "%s\t%s\t%s\n" 'Number' 'Squared' 'Power of 3'

for i in "$@" ;  do
   printf "%i\t%i\t%i\n" $i $(($i * $i)) $(($i * $i *$i))
done

答案2

由于问题使用“方法”一词,因此意味着要给出的答案是“粗略”或有些“笼统”,因此我陈述了可以用来解决此问题的以下步骤:

  • 写一个预计- 脚本进行争论即将发送至/home/alice/math.
  • 编写一个 BASH 脚本(例如/home/user/newprogram),它使用给定 BASH 脚本的参数在循环中调用 Expect 脚本命令替换捕获其输出。
  • 使用您最喜欢的文本处理工具,例如grep提取所需的数据并将其存储在变量中(为此,您需要将捕获的输出通过管道传输到grep,再次使用命令替换来捕获命令传递的数据grep并将其存储在变量中)。
  • 将您在本步骤之前的步骤中解析的变量输出到表中。

这些步骤确实假设具有对/home/alice/math.当然,如果不是这种情况,可以例如:

  • /home/alice/math仅使用chmod或更改权限或所有者chown
  • aliceuser放在具有足够权限的公共组中,以便两个用户都可以访问/home/alice/math.

相关内容