1

Мне нужно создать формулу в сценарии оболочки 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 ответ1

3

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

То, что у вас есть в псевдокоде, примерно так:

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 (в bash), взгляните на man bash под заголовком встроенных команд Shell . Другие оболочки могут использовать внешнюю команду, в этом случае применяется man test (вы можете использовать внешнюю команду в bash, например, через if command test ...; then если вы предпочитаете это по какой-то причине).

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .