Функция проверки переменной BASH

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

# webadmin enabled if [ -f "${servercfgfullpath}" ]; then webadminenabled=$(grep "ControlPanelEnabled" "${servercfgfullpath}" | sed 's/^.*value="//' | cut -f1 -d"\"") if [ ! -n "${webadminenabled}" ]; then webadminenabled="NOT SET" fi else webadminenabled="\e[0;31mUNAVAILABLE\e[0m" fi # webadmin port if [ -f "${servercfgfullpath}" ]; then webadminport=$(grep "ControlPanelPort" "${servercfgfullpath}" | tr -cd '[:digit:]') fi if [ ! -n "${webadminport}" ]; then webadminport="0" fi 

В летнее время код сначала проверяет, доступен ли файл конфигурации, если не отображает «UNAVAILABLE» для пользователя. Если доступен файл конфигурации, вы попытаетесь получить конкретную информацию из файла конфигурации пользователю, если это не произойдет, вместо этого отобразится «NOT SET».

На самом деле это не проблема, если она используется только несколько раз, но это повторяется много раз и, хотя работает, далека от идеала, так как ее очень трудно читать.

переменная serverconfigpath, я считаю, достаточно легко улучшить, но я хотел бы создать функцию или способ просто установить переменную в «NOT SET», если переменная не смогла получить нужную ему информацию.

Любые идеи или указатели на то, как оптимизировать этот код?

Вот конкретный файл с оскорбительным кодом https://github.com/dgibbs64/linuxgsm/blob/master/functions/info_config.sh

One Solution collect form web for “Функция проверки переменной BASH”

Переменные назначения могут быть упрощены следующим образом:

 if [ ! -n "${varname}" ]; then varname="some default" fi 

эквивалентно

 varname=${varname:-"some default"} 

и, еще более кратким,

 : ${varname:="some default"} 

Чтобы параметризовать это для произвольных имен переменных и значений по умолчанию, я предлагаю определить функцию. bash настаивает на явном имени переменной для замены параметров с помощью ${...} , поэтому указание косвенной переменной или команды вместо varname не представляется возможным (для меня):

 #!/bin/bash # exec_with_default # Assign command output to specified variable, or assign default value if # output empty # # $1 : command # $2 : variable to be set # $3 : default value for variable function exec_with_default { local t="$($1)" # Assign command output to temporary variable t : ${t:="$3"} # Perform bash parameter subsitution on t eval "$2=\$t" # Indirectly assign t to variable name provided in $3 } exec_with_default "echo something" "varname" "not set" echo $varname exec_with_default "echo" "varname" "not set" echo $varname 
  • Использование find с двумя наборами переменных
  • Как сопоставить текст между строкой и пробелом
  • Удерживать несколько пробелов, содержащих аргументы в одной переменной?
  • Как использовать расширенное значение переменной оболочки в имени другой переменной?
  • команда `read` не работает в Makefile
  • Как сохранить статус последнего выхода после теста
  • Как я могу объединить переменную оболочки с другими другими параметрами в моих командных строках?
  • Как добавить текст в переменную в make-файле?
  • Создать переменную на основе порядка, в котором файл находится в алфавитном списке файлов
  • Использование «$ {a: -b}» для назначения переменных в скриптах
  • отображение PID
  • Linux и Unix - лучшая ОС в мире.