Как использовать пользовательский ввод для выбора переменной в bash? - PullRequest
1 голос
/ 04 ноября 2019

Я хочу отправить несколько предопределенных запросов в MySQL. Я буду использовать переменную, определенную внутри, используя внешнюю переменную, как показано ниже. Но не хорошо.

[testuser@testserver work]$ cat test1.sh 
#!/bin/sh

query1='select * from mysql.user limit 2;'
query2="select * from mysql.user limit 2;"

echo $1
echo "$1"
#mysql -uuser-p -e "$1"

это результат

[testuser@testserver work]$ sh test3.sh query1 
query1
query1

но я хочу результат

[testuser@testserver work]$ sh test1.sh  query1 
select * From mysql.user limit 1

как изменить этот bash scrpit?

Ответы [ 3 ]

4 голосов
/ 04 ноября 2019

Попробуйте просто:

#!/bin/bash

query1='select * from mysql.user limit 2;'
query2="select * from mysql.user limit 2;"

echo "${!1}"
#mysql -uuser-p -e "${!1}"

Но вы могли бы:

#!/bin/bash

queries=('select * from mysql.user limit 2;'
        "select * from mysql.user limit 2;")

echo "${queries[$1]}"
#mysql -uuser-p -e "${queries[$1]}"

Затем запустить ./test 0 или ./test 1.

Или даже

#!/bin/bash

declare -A queries=$'(
    [query1]=\047select * from mysql.user limit 2;\047
    [query2]="select * from mysql.user limit 2;")'

echo "${queries[$1]}"
#mysql -uuser-p -e "${queries[$1]}"

Примечание. Синтаксис $'....\047...\047...' - это хитрость для использования простых кавычек в строке в кавычках.

Затем запустите ./test3 query1.

1 голос
/ 04 ноября 2019

Можно также использовать регистрацию дела:

#!/usr/bin/env bash


case "$1" in
    --query1)
        echo "select * from mysql.user limit 1;"
        ;;
    --query2)
        echo "select * from mysql.user limit 2;"
        ;;
    *)
        echo "unkown option"
        exit 1
        ;;
esac

, затем выполнить что-то вроде: ./test --query1

0 голосов
/ 04 ноября 2019

Вы можете добавить следующие строки:

#!/bin/bash

query1='query 1'
query2='query 2'

eval var="$"$1
echo $var

Редактировать: при этом используется eval, которого следует избегать, что может быть небезопасно, если вы не доверяете данным. Для сценариев Bash существует косвенная переменная через механизм "$ {! VARNAME}", поэтому вы можете использовать "$ {! 1}".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...