Как мне написать условное назначение в скрипте 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
в отдельной строке и пропустите точку с запятой, которая является другим способом форматирования точно такой же вещи.