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"