Повторять оператор if else до тех пор, пока условие не будет выполнено успешно

No debe guardar ningún dato confidencial en texto sin formato. Debe estar encriptado para que nadie pueda descifrarlo.

Agregar toda la configuración en el archivo JSON Cifre el archivo JSON usando alguna contraseña y guárdelo en el servidor Mientras ejecuta la aplicación, descifre el archivo y use variables

Consulte este módulo :https://github.com/nareshv/secure-conf

Nota :Para proteger dicho código, puede hacer su javascript en un formato ilegible en producción usandohttps://javascriptobfuscator.com/.

El uso de esta técnica puede guardar su código.

0
09.07.2019, 22:32
1 ответ

То, что вы ищете, называется whileциклом.Рассмотрим этот простой пример:

n=0
while [ $n -lt 5 ]; do
  echo Not done yet
  n=$(($n+1))
done

Цикл while делает две вещи, и, как подразумевается, программист должен сделать третью вещь.

  1. Цикл while проверяет условие :is nменьше 5?
  2. Если условие верно, то:

    • тело цикла whileвыполняется один раз
    • цикл whileвозвращается к шагу 1 и снова проверяет условие

Если условие не выполняется, цикл завершается, а выполнение скрипта продолжается с оператора, следующего за ключевым словом doneцикла.

Третье, за которое отвечает программист, это сделать что-то внутри тела цикла, что (или может )изменить состояние условного выражения. В приведенном выше простом примере этим шагом является оператор n = $(($n+1)). Без этого цикл станет бесконечным, потому что условие изначально истинно и никогда не меняется. Попробуйте запустить скрипт, закомментировав эту строку, и посмотрите, что произойдет. Затем нажмите CtrlC .

Чтобы адаптировать этот пример к вашей конкретной проблеме, я думаю, вы захотите отменить тест [ -z "${RT_SEQ_CHECK}" ]для вашего whileсостояния. Под этим я подразумеваю, что когда [ -z "${RT_SEQ_CHECK}" ]истинно, это означает, что ${RT_SEQ_CHECK}имеет нулевую -длину, и именно тогда вы хотите остановить зацикливание. К счастью, testимеет опцию -n, которая является полной противоположностью опции -z.

Таким образом, в общих чертах ваша whileпетля будет выглядеть примерно так:

FIELD_VALUES_1SQ_FUNC
RT_FIELD_IDS_FUNC ${TABLE_NAME} ${COL_NAME}
RT_SEQ_CHECK_FUNC ${FIELD_VALUES_1SQ} ${RT_FIELD_ID}

while [ -n "${RT_SEQ_CHECK}" ]; do

    FIELD_VALUES_1SQ_FUNC
    RT_FIELD_IDS_FUNC ${TABLE_NAME} ${COL_NAME}
    RT_SEQ_CHECK_FUNC ${FIELD_VALUES_1SQ} ${RT_FIELD_ID}

done

Наконец, у меня есть, надеюсь, конструктивный комментарий к структуре вашего кода. Обычно вы используете глобальные переменные для возврата значения из функции, а затем ссылаетесь на эти глобальные переменные в основной части кода. Это может затруднить чтение и выполнение кода. Вместо кодирования в этом стиле:

STEP1() {
  DATE=$(date)
}

STEP2() {
  echo "today is $DATE"
}

STEP1
STEP2

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

STEP1() {
  date
}

STEP2() {
  echo "today is $1"
}

DATE="$(STEP1)"
STEP2 "$DATE"

Опять же,применение вашего кода может привести к чему-то вроде этого:

FIELD_VALUES_1SQ_FUNC()
{
        sqlplus -s sab/admin@TERM << EOF | tr -d ' '
        SET FEEDBACK OFF;
        SET HEADING OFF;
        Select TESTING.FIELD_VALUES_TEMP_1SQ.NEXTVAL from dual;
        exit;
EOF 
}

RT_SEQ_CHECK_FUNC()
{
        sqlplus -s sab/admin@TERM << EOF | tr -d ' '
        SET FEEDBACK OFF;
        SET HEADING OFF;
        Select * from TESTING.FIELD_VALUES where FIELD_ROW_ID='${1}'
                  and TF_ID='${2}';
        exit;
EOF 
}

RT_FIELD_IDS_FUNC()
{
        sqlplus -s sab/admin@TERM << EOF | tr -d ' '
        SET HEADING OFF;
        SET FEEDBACK OFF;
        select max(TF_ID) from TESTING.TABLE_FIELD 
           where field_id in (select field_id from TESTING.FIELD_DOMAIN where name='${2}') 
             and table_id in (select table_id from TESTING.TABLE where name='${1}');
        EXIT;
EOF 
}

        FIELD_VALUES_1SQ="$(FIELD_VALUES_1SQ_FUNC)"

        RT_FIELD_ID="$(RT_FIELD_IDS_FUNC ${TABLE_NAME} ${COL_NAME})"

        RT_SEQ_CHECK="$(RT_SEQ_CHECK_FUNC ${FIELD_VALUES_1SQ} ${RT_FIELD_ID})"
1
28.01.2020, 02:39

Теги

Похожие вопросы