Укажите значение по умолчанию, если команда возвращает ненулевой код завершения

Укажите значение по умолчанию, если команда возвращает ненулевой код завершения

У меня есть некоторая конфигурация в файле config, и я хотел бы, чтобы catэтот файл. Однако иногда configего не существует. В этом случае я хотел бы, чтобы моя команда выводила значение по умолчанию.

Возможно, что-то сработало примерно так:

$ ls
$ cat config || echo 42
42
$ echo 73 > config
$ cat config || echo 42
73

решение1

Ваша конструкция хороша. Вы даже могли бы сделать что-то вроде

cat config || cat defaultconfig

Если вы используете какую-то случайную команду (вроде ./get_config_from_webв комментариях), вам придется убедиться, что команда возвращает разумный статус возврата. Это может быть сложно, скрипты оболочки просто возвращают результат последней выполненной команды, вам придется сделать a, exitесли вы хотите получить что-то другое в качестве результата.

решение2

Следующий код выведет код 42 для любого неперехваченного состояния ошибки:

trap "echo 42" ERR

Вы можете сделать это настраиваемой переменной:

trap 'echo "${CONFIG:=42}"' ERR  # if $CONFIG is not set, it will be defaulted to 42

решение3

if [ -a config ]; then cat config; else echo ${DEFAULT};fi

при условии, что переменная DEFAULT заранее установлена ​​на какое-то значение.

решение4

Вы можете использовать код выхода в операторе if:

#!/bin/bash
cat config
if [[ "$?" -ne "0" ]]; then
    echo "VALUE"
fi

Если предыдущая команда будет выполнена успешно, она выйдет со значением "0". Таким образом, вы сообщаете ей, что при любом другом выходе (неудачах) она выведет то, что находится в "VALUE".

Связанный контент