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

Мне нужно создать формулу в сценарии оболочки Linux. Если бы это был DOS, я (вероятно) был бы в порядке, но я сделал изменения и должен учиться....!

D1 = 5-значный номер между 40500 и 49500 (это данные атмосферного давления из отчета SYNOP аэропорта)

D2 = последние четыре цифры D1 (я могу это сделать)

D3 = первая цифра D2 (я тоже могу это сделать)

D4 будет D2, деленным на 10, к которому 1000 добавляется, только если D3=0.

Я ищу что-то вроде: ЕСЛИ D3 = 0, ТО D4=((D2/10)+1000) Иначе D4=(D2/10)

Спасибо Найджел.

1 ответ

Решение

У вас уже есть проблемы с синтаксисом.

В псевдокоде у вас есть следующее:

if d3 equals 0 then
    set d4 equal to ((d2/10)+1000)
else
    set d4 equal to (d2/10)
end if

что переводится как, в bash (что вы, скорее всего, будете использовать для сценариев оболочки в Linux):

if test "$d3" -eq "0"; then
    d4=$(( ( $d2 / 10 ) + 1000 ))
else
    d4=$(( $d2 / 10 ))
fi

Вам нужно fi положить конец if заявление и $(( ... )) арифметическое расширение в bash. Обратите внимание, что $( ... ) совершенно другой; это подстановка процесса, которая берет выходные данные данной команды и возвращает их. Очень полезно, но не совсем то, что вы после здесь.

Вышесказанное предполагает, что $d2, $d3 а также $d4 уже установлены правильные значения и отсутствуют переменные окружения с конфликтующими именами.

Если вы знаете , что $d3 никогда не будет содержать ничего, кроме цифр, которые вы можете покончить с цитированием в параметрах test, но мне нравится держать это в качестве защитной сетки. Чтобы узнать больше о том, что вы можете сделать с test (в Баш), посмотрите на man bash под заголовком встроенных команд оболочки. Другие оболочки могут использовать внешнюю команду, в этом случае man test применяется (вы можете использовать внешнюю команду в bash, например, через if command test ...; then если вы предпочитаете это по какой-то причине).

Точка с запятой перед then необходимо, потому что then на самом деле это отдельная команда в bash; Вы могли бы также поставить then в отдельной строке и пропустите точку с запятой, которая является другим способом форматирования точно такой же вещи.

Другие вопросы по тегам