как передать аргумент в виде строки, вне которой должна выполняться определенная функция

dovecotдолжен работать более или менее из коробки. Возможно, вам потребуется включить аутентификацию открытым текстом для небезопасных соединений. Раскомментируйте строку disable_plaintext_authи измените yesна no

.
disable_plaintext_auth = no

Установите пакет с помощью команды sudo apt-get install dovecot-imapd.

0
30.10.2019, 09:01
2 ответа

Прежде всего, добро пожаловать на сайт.

Ответ на ваш вопрос зависит от того, насколько последовательно аргументы передаются сценарию.

Если гарантируется, что

  • Аргумент «создать» используется только тогда, когда имеется три аргумента, где «arg1» и «arg2» предшествуют «создать», и аналогично
  • Аргумент «добавить» используется только тогда, когда всего два аргумента, где «arg1» предшествует «добавить»

затем вы можете выполнить тест ifвнутри вашего скрипта, работая со встроенной переменной $#, которая содержит общее количество аргументов, с которыми вызывается скрипт:

#!/bin/bash

if [[ "$#" == "3"  && "$3" == "create" ]]
then
   create_fn <possible arguments here>
elif [[ "$#" == "2" && "$2" == "add" ]]
then
   create_add <possible arguments here>
fi

Чтобы объяснить :В тесте ifмы проверяем, равно ли количество аргументов($#)трем и третий аргумент($3)"создать", а затем вызываемcreate_fn(возможно с аргументами; вы не указали, требуется ли это в вашем вопросе ); или , если число или аргументы равны 2, а второй аргумент — «добавить», и в этом случае мы вызываем create_add.

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

Дополнительную информацию о программировании оболочки см. в Advanced Bash Scripting Guide .

Относительно второй части вашего вопроса :Функция, которую вы ищете, называется «завершение bash» и не является тривиальной вещью, в частности, поскольку вы хотите автоматически -завершить команда -аргументы строки , где возможные значения могут зависеть от позиции текущего типизированного аргумента в списке и предыдущих элементов в строке команды -. Это возможно, но не тривиально (, см., например. Как настроить завершение команд Bash?).

0
28.01.2020, 03:10

Я думаю, вам следует немного изменить настройку и использовать флаги опций через getops. Однако они должны быть в начале и состоять только из отдельных букв. Пример:

 #!/bin/bash

 add=no
 create=no
 while getopts "ca" option ; do
   case $option in
     a) add=yes ;;
     c) create=yes ;;
     \?) echo 'Invalid option. Aborted.' ; exit ;;
   esac
 done
#shift argument numbers so that file1 is $1 etc.
shift $((OPTIND-1))

if [[ "$add" == "yes" ]] ; then
  do_add_procedure
elif [[ "$create" == "yes" ]] ; then
  do_create_procedure
else
  do_neither
fi

В зависимости от того, как вы выполняете операторif-(, т. е. разделяете его на два оператора ), теперь вы даже можете запустить как «создать», так и «добавить», указав обе опции. Однакоbash-аргументы скрипта должны быть в начале вашей команды:

./script.sh -a file1 file2
0
28.01.2020, 03:10

Теги

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