Функция проверки переменной 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 задана новой переменной в bash
  • Как передать переменную в sftp?
  • Как сохранить статус последнего выхода после теста
  • Проверьте, содержит ли строка строку подстроки
  • Как изменить переменные
  • Назначить имя хоста переменной в ksh
  • Область переменных в while-read-loop на Solaris
  • Как распространять значение переменной
  • Установка переменной, значение которой зависит от другой переменной
  • Удалить определенное слово в переменной
  • Невозможно выполнить сценарий Bash, если / while
  • Interesting Posts

    Как выйти из диспетчера окон на текущем дисплее X?

    mdadm с наложением lvm – удалить жесткий диск

    Как добавить нуль (0) в пробелы в большом файле (пример файла ниже)

    Как заставить Vi работать как Emacs в оболочке Git Bash?

    Строка состояния tmux с пустой строкой сверху?

    Сравните старый файл и новый файл, но игнорируйте строки, которые существуют только в новом файле?

    насколько практично количество ядер в Android

    Вызывается ли SIGHUP при нарушении соединения telnet / SSH?

    logrotate работает при запуске вручную, не выполняется при запуске cron

    bash: невозможно создать временный файл для здесь-документа: на устройстве нет места

    Закройте все трубные команды, если закрыть

    Нет подсказки индикатора bash после завершения разветвленного процесса

    Чашки, показывающие удаленные рабочие места, как завершенные, а не печать

    Как автоматизировать настройку рабочего стола при запуске?

    Использование bzgrep рекурсивно

    Linux и Unix - лучшая ОС в мире.