Organizando um script com outro

1

Se eu tiver um script que faça o seguinte

    [alice]$ math
    Enter a number: 5

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

E eu quero escrever outro script que organize a saída do script de matemática em uma tabela, mas também possa levar vários argumentos e não mostre o "Número dividido". Por exemplo

   [alice]$ newprogram 5 10

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

Além disso, o script de matemática está localizado em /home/alice e o novo programa será localizado em /home/user . Como abordo isso?

    
por bbycakes3 27.10.2015 / 06:08

2 respostas

1

Veja minha resposta à sua pergunta anterior para obter informações sobre como encaminhar argumentos para o script existente. Analisar a saída desta será mais difícil que a última.

É muito mais simples escrever uma nova versão do script. Analisar palavreado escandaloso como esse é um grande PITA.

Aqui está uma versão que faz isso, e também não repete o erro original de imprimir saída em excesso (como cabeçalhos).

#! /bin/bash

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

E aqui está uma versão que opcionalmente imprime um cabeçalho se você usar a opção -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
    
por 27.10.2015 / 07:14
1

Como a pergunta usa a palavra 'abordagem', isso implica que a resposta a ser dada é ser 'esboçada' ou um pouco 'geral', portanto estou afirmando os seguintes passos que uma pessoa pode usar para abordar isto:

  • Escreva um espere -script que leva um argumento que deve ser enviado para /home/alice/math .
  • Escreva um script BASH (por exemplo, /home/user/newprogram ) que invoca o script expect em um loop com os argumentos dados ao seu script BASH e com substituição do comando para capturar seu resultado.
  • Use sua ferramenta de processamento de texto favorita, por exemplo grep para extrair os dados necessários e armazená-los em variáveis (para isso você precisa canalizar a saída capturada para grep , novamente usando a substituição de comando para capturar os dados que o comando grep fornece e armazenando isso em uma variável) .
  • Envie as variáveis que você analisou na etapa anterior a essa etapa em uma tabela.

Essas etapas pressupõem ter acesso a arquivos (por exemplo, executar e ler conjunto de bits) para /home/alice/math . Claro, se esse não for o caso, pode-se, por exemplo:

  • Alterar permissões ou proprietário para /home/alice/math apenas com chmod ou chown .
  • Coloque alice e user em um grupo comum com direitos suficientes para que ambos os usuários tenham acesso a /home/alice/math .
por 27.10.2015 / 08:32