Entrada do usuário no bash do linux para checar uma lista e responder com resultado

0

Estou tentando obter o bash para solicitar uma entrada do usuário de leitura e para verificar um arquivo ou lista de arquivos e, em seguida, responder com o resultado desse chesk. Isto é tanto quanto eu tenho chegado ainda ...

read -p "what are we looking for?" RESP
if [ "$RESP" = sed -n ${some line from inside file} ./file | 
then do "returned variable from file"

else
echo "You need more bash programming" 

Eu sei que sou muito novo aqui, mas não consigo entender o que quer que seja a resposta precisa ser verificada em um arquivo (o que está dentro do arquivo) - linha por linha, em seguida, retornar uma variável associada dessa linha

diga como

"RESP"=line 3(or any line that matches) of ./this_file 
return "var1" of that line
Do "var1"

fi

Esta é a maneira de fazer isso, como seria esse código em um simples evento Estou tão perdido por favor ajude

exemplo:

linha1: "abra o google" "var1 [abra http: www.google.com.br]

passe "var1" para o bash

    
por Rob Looman 03.09.2014 / 03:08

1 resposta

1

Para arquivo, sugiro um formato como:

please open google|open http:www.google.com

Aqui a resposta é tudo antes da barra vertical. Seu var1 é tudo depois da barra vertical. (Se você tivesse mais vars para colocar nessa linha, separe-os com mais barras verticais.)

Quanto ao script, aqui está um começo:

#!/bin/sh
read -p "what are we looking for? " response
action="$(awk -F\| -v r="$response" '$1==r{print $2;exit}' file)"
eval "$action"

O comando read obtém a entrada. (É uma boa prática usar letras minúsculas para as variáveis do shell para que você não sobrescreva acidentalmente algo importante.)

A linha com awk extrai a ação da primeira linha no arquivo que começa com response| . Ele assume que tudo após essa primeira barra vertical é o seu comando.

A última linha acima executa action . Isso é feito com eval . O uso de eval requer algum nível de confiança. Ao refinar seu design, você deve eliminar o uso de eval .

Usando um separador de campo diferente

Se usarmos @ no lugar de | para o separador de campo, então file teria linhas como:

please open google@open http:www.google.com

O código precisa de uma única alteração:

read -p "what are we looking for? " response
action="$(awk -F@ -v r="$response" '$1==r{print $2;exit}' file)"
eval "$action"
    
por 03.09.2014 / 05:05

Tags