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.
То, что вы ищете, называется while
циклом.Рассмотрим этот простой пример:
n=0
while [ $n -lt 5 ]; do
echo Not done yet
n=$(($n+1))
done
Цикл while делает две вещи, и, как подразумевается, программист должен сделать третью вещь.
n
меньше 5? Если условие верно, то:
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})"