Como analisar comandos de um arquivo de texto para um script bash na CLI

0

Eu tenho um script bash que obtém os dados por isso:

$ ./script.sh var1 var2 var3

O que eu quero é ter as variáveis em um arquivo de texto no mesmo formato que eu digito na linha de comando.

input.txt

var1 var2 var3

E eu quero de alguma forma alimentar este texto para o meu script bash na linha de comando, não no script bash:

./script.sh input.txt

Como isso é possível?

Atualização:

Aqui está o meu script:

#!/bin/bash

DOMAINS=( '.com' '.biz' )

VALUE=$(<input.txt)
INPUT=('echo "$VALUE"')

ELEMENTS=${#DOMAINS[@]}

while (( "$#" )); do

  for (( i=0;i<$ELEMENTS;i++)); do
      whois $1${DOMAINS[${i}]} | grep --perl-regexp --text --null --only-matching --quiet 'Creation Date'
    if [ $? -eq 0 ]; then
        echo -e "$1${DOMAINS[${i}]}\tregistered\t"
    else
        echo -e "$1${DOMAINS[${i}]}\tavailable\t"
    fi
  done

shift

done

Como você pode ver, tentei implementar no script também, mas não sou programador.

A solução perfeita seria remover os dados usados do arquivo input.txt. Então, se ele lê var1 de input.txt, então remova-o de lá! Isso pode ser resolvido?

    
por Lanti 15.11.2015 / 13:24

1 resposta

3

Existem várias maneiras de fazer isso. Se o seu script não precisar de mais de um argumento, basta usar um loop while para ler o arquivo. Também removerei algumas das opções grep desnecessárias (você não precisa de --only--matching ao usar --quiet , nunca verá a saída, não precisa de regex perl porque não está usando nenhuma das seus recursos e você não precisa de --text , já que não analisará arquivos binários) e usar os nomes das opções mais curtas para brevidade.

Portanto, uma versão funcional (e ligeiramente melhorada) do seu script seria:

#!/bin/bash

DOMAINS=( '.com' '.biz' )

while read input; do
    for (( i=0;i<${#DOMAINS[@]};i++)); do
    whois "$input${DOMAINS[$i]}" | grep -q 'Creation Date'
    if [ $? -eq 0 ]; then
            echo -e "$input${DOMAINS[$i]}\tregistered\t"
    else
            echo -e "$input${DOMAINS[$i]}\tavailable\t"
    fi
    done
done < "$1"

Se você executar isso em um arquivo que contenha:

google
foogle

Você recebe:

$ foo.sh file
google.com  registered  
google.biz  available   
gaagle.com  registered  
gaagle.biz  available   
    
por 15.11.2015 / 15:37