управляйте сценарием удара с переменными из внешнего файла

Вы проверили, что база данных аутентификации/авторизации не изменилась или стала недоступной?

Если Вы проходите проверку подлинности против Active Directory (через LDAP), там было изменение там?

7
задан 7 January 2013 в 12:08
4 ответа

Со сценариями оболочки это обычно выполняется с помощью source функция, которая выполняет файл как сценарий оболочки, как будто это было встроено в скрипт, который Вы запускаете - что означает, что любые переменные Вы устанавливаете в файле, экспортируется в Ваш сценарий.

Оборотная сторона то, что (a) Ваш файл конфигурации выполняется, таким образом, это - угроза безопасности, если непривилегированные пользователи могут отредактировать привилегированные файлы конфигурации. И (b) Ваш синтаксис файла конфигурации ограничивается допустимым синтаксисом удара. Однако, это ДЕЙСТВИТЕЛЬНО удобно.

config.conf

USER=joe
PASS=hello
SERVER=127.0.0.2

script.sh

#!/bin/bash

# Set defaults   
USER=`whoami`

# Load config values
source config.conf

foobar2000 --user=$USER --pass=$PASS --HOST=$HOST

source может быть сокращен с синглом . - таким образом, следующие два эквивалентны:

 source file.sh
 . file.sh
8
ответ дан 2 December 2019 в 23:29

Что-то вроде этого. Важный бит использует чтение для захвата строки как массива.

#!/bin/bash
configfile=/pathtocontrolfile
cat $configfile | while read -a HR ; do

  [[ -z ${HR[0]} ]] && continue  # skip empty lines

  USER1=${HR[0]}
  HOST1=${HR[1]}
  PW1=${HR[2]}
  USER2=${HR[3]}
  HOST2=${HR[4]}
  PW2=${HR[5]}

  imapsync \
  --buffersize 8192000 --nosyncacls --subscribe --syncinternaldates --IgnoreSizeErrors \
  --host1 $HOST1 --user1 $USER1 --password1 $PW1 --ssl1 --port1 993 --noauthmd5 \
  --host2 $HOST2 --user2 $USER2 --password2 $PW2 --ssl2 --port2 993 --noauthmd5 --allowsizemismatch

done
3
ответ дан 2 December 2019 в 23:29

Я думаю, вам следует использовать что-то вроде getopts, если вы хотите сделать свой сценарий умным, вместо того, чтобы просто пытаться читать ваши аргументы на основе чисел.

Что-то вроде этого.

#!/bin/bash

while getopts ":a" opt; do
  case $opt in
    a)
      echo "-a was triggered!" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done


$ ./go_test.sh -a
-a was triggered!
$ 

] Вы также можете анализировать аргументы. Вы можете прочитать более подробную информацию об учебнике по здесь .

0
ответ дан 2 December 2019 в 23:29

Я нашел здесь рабочее решение: https://af-design.com/2009/07/07/loading-data-into-bash-variables/

if [ -f "$SETTINGS_FILE" ];then
    . "$SETTINGS_FILE"
fi
0
ответ дан 2 December 2019 в 23:29

Теги

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