Bash Скрипт с несколькими переменными - PullRequest
0 голосов
/ 19 февраля 2020

Вот что я пытаюсь сделать:

  • Запрос имени пользователя, базы данных и пароля для SQL
  • Попытка SQLDUMP
  • В случае сбоя из-за чтобы указать c таблицу, спросите, для какой таблицы, после ввода, добавьте ее в сценарий.
  • Выполните автоматический запуск после добавления таблицы
  • Если снова возникла ошибка, запросите новую таблицу, добавьте таблицу в list
  • Продолжайте этот процесс до успешного завершения

Вот что я сделал до сих пор:

#!/bin/bash

:dbase
echo "What is the Database name?"
read db1
goto :PW

:PW
echo "what is the password?"

read p1


PASSWORD=${p1}
HOST=mysql
USER=root
DATABASE=${db1}
DB_FILE=SQLDump.sql
EXCLUDED_TABLES=(
)

IGNORED_TABLES_STRING=''
for TABLE in "${EXCLUDED_TABLES[@]}"
do :
   IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}"
done

echo "Dump structure"
mysqldump --compress --host=${HOST} --user=${USER} --password=${PASSWORD} --single-transaction --no-data --routines --extended-insert=false --max_allowed_packet=2048M ${DATABASE} > ${DB_FILE}

echo "Dump content"
mysqldump --compress --host=${HOST} --user=${USER} --password=${PASSWORD} --extended-insert=false --max_allowed_packet=2048M ${DATABASE} --no-create-info --skip-triggers ${IGNORED_TABLES_STRING} >> ${DB_FILE}
pause
alias ll='ls -lah'
ll *.sql

:choice
set /P c=Do you see your file[Y/N]?
if /I "%c%" EQU "Y" goto :yes
if /I "%c%" EQU "N" goto :no
goto :choice


:yes

echo "Awesome, I'll delete this script now."
rm -rf /srv/SQLDump
echo "I have successfully deleted SQLDUMP."
pause
exit

:no
echo "What was the name of the table that failed?"
read $table1
set /P c=Was there another?[Y/N]?
if /I "%c%" EQU "Y" goto :t2
if /I "%c%" EQU "N" goto :continue


PASSWORD=${p1}
HOST=mysql
USER=root
DATABASE=${db1}
DB_FILE=SQLDump.sql
EXCLUDED_TABLES=(
${table1}
)

IGNORED_TABLES_STRING=''
for TABLE in "${EXCLUDED_TABLES[@]}"
do :
   IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}"
done

echo "Dump structure"
mysqldump --compress --host=${HOST} --user=${USER} --password=${PASSWORD} --single-transaction --no-data --routines --extended-insert=false --max_allowed_packet=2048M ${DATABASE} > ${DB_FILE}

echo "Dump content"
mysqldump --compress --host=${HOST} --user=${USER} --password=${PASSWORD} --extended-insert=false --max_allowed_packet=2048M ${DATABASE} --no-create-info --skip-triggers ${IGNORED_TABLES_STRING} >> ${DB_FILE}
pause
alias ll='ls -lah'
ll *.sql

:choice
set /P c=Do you see your file[Y/N]?
if /I "%c%" EQU "Y" goto :yes
if /I "%c%" EQU "N" goto :no
goto :choice

Очевидно, он еще не закончен. Я столкнулся с проблемой, когда я вызываю скрипт снова и снова, чтобы добавить несколько таблиц. Я знаю, что есть обходной путь, но, поскольку я самоучка, я не смог понять это. Идеи

1 Ответ

0 голосов
/ 19 февраля 2020

Чтобы перезапустить ваш скрипт, он должен поддерживать параметры, поэтому я бы предложил этот подход

#!/bin/bash

# get options if restarter
while [[ $@ ]]; do
    case $1 in
        --name) name="$2";;
        --pass) pass="$2";;
        --tabl) tables+=("$2");;
    esac
    shift
done

# get initial data when started first time
[[ $pass ]] || read -p 'What is the password? '      pass
[[ $name ]] || read -p 'What is the Database name? ' name

options=( --name "$name" --pass "$pass" )

# your code here
# add tables to tables to options array like this
# options+=(--tabl "table name")

# and restart script with options like this

$0 "${options[@]}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...