В чем разница между версией сервера и настольной версией?

Я все еще ищу чистый bc ответ на то, как объединить только одно значение внутри функции, но вот чистый ответ bash:

#!/bin/bash

echo "Insert the price you want to calculate:"
read float
echo "This is the price without taxes:"

embiggen() {
  local int precision fraction=""
  if [ "$1" != "${1#*.}" ]; then  # there is a decimal point
    fraction="${1#*.}"       # just the digits after the dot
  fi
  int="${1%.*}"              # the float as a truncated integer
  precision="${#fraction}"   # the number of fractional digits
  echo $(( 10**10 * $int$fraction / 10**$precision ))
}

# round down if negative
if [ "$float" != "${float#-}" ]
  then round="-5000000000"
  else round="5000000000"
fi

# calculate rounded answer (sans decimal point)
answer=$(( ( `embiggen $float` * 100 + $round ) / `embiggen 1.18` ))

int=${answer%??}  # the answer as a truncated integer

echo $int.${answer#$int}  # reassemble with correct precision

read -p "Press any key to continue..."

В принципе, это тщательно извлекает десятичные числа, умножает все на 100 миллиардов (10¹⁰, 10**10 в bash), настраивается для точности и округления, выполняет фактическое деление, делит обратно на соответствующую величину и затем вставляет десятичное число.

[d2 ] Шаг за шагом:

Функция embiggen() присваивает усеченную целочисленную форму своего аргумента $int и сохраняет числа после точки в $fraction. Число дробных цифр отмечено в $precision. Математика умножает 10¹⁰ на конкатенацию $int и $fraction, а затем корректирует это, чтобы соответствовать точности (например, embiggen 48.86 становится 10¹⁰ × 4886/100 и возвращает 488600000000, что составляет 488 600 000 000).

[d4 ] Мы хотим получить окончательную точность сотых, поэтому умножим первое число на 100, добавим 5 для округления, а затем разделим второе число. Это присвоение $answer оставляет нас в сто раз окончательный ответ.

Теперь нам нужно добавить десятичную точку. Мы присваиваем новое значение $int для $answer, исключая его последние две цифры, затем echo с точкой и $answer, за исключением значения $int, которое уже было выполнено. (Не обращайте внимания на ошибку подсветки синтаксиса, которая делает это похожим на комментарий)

(Башизм: возведение в степень не является POSIX, поэтому это базис. Чистое решение POSIX требует, чтобы циклы добавляли нули, а не использовали полномочия из десяти.Кроме того, «embiggen» - это отличное кромовое слово.)

Одна из основных причин, по которым я использую zsh, как свою оболочку, заключается в том, что она поддерживает математику с плавающей запятой. Решение этого вопроса довольно прямолинейно в zsh:

printf %.2f $((float/1.18))

(я бы хотел, чтобы кто-то добавил комментарий к этому ответу с трюком, чтобы включить арифметику с плавающей запятой в bash, но я уверен, что такой функции еще не существует.)

1
задан 22 November 2012 в 03:35

2 ответа

Стоит отметить, что, помимо настроек ядра, Ubuntu Desktop и Server по сути являются одним и тем же дистрибутивом, только с различным выбором пакета по умолчанию. Они используют одни и те же пакеты и репозитории. Если вы запустите apt-get install ubuntu-desktop, вы получите функциональный эквивалент Desktop Edition.

Это также означает, что любой пакет, предназначенный для Ubuntu Server, будет работать так же радостно при установке на вашем компьютере.

47
ответ дан 25 May 2018 в 22:29
  • 1
    Краткий, ясный и простой ответ для новичков – Ali Bagheri Shakib 17 December 2017 в 02:18

Если вы устанавливаете с использованием компакт-диска сервера или компакт-диска с рабочим столом, вы получаете тот же Ubuntu. Разница заключается в том, какой выбор пакетов он устанавливает по умолчанию - то есть - какой выбор программного обеспечения вы заканчиваете в конце процесса установки.

Можно перейти от настольной системы к серверу системы и наоборот на уже установленной копии Ubuntu. Ubuntu даже делает это относительно легко с помощью утилиты tasksel или с метапакетами, такими как ubuntu-desktop и ubuntu-server (доступный через стандартный менеджер пакетов apt, по крайней мере, с 16.04). Вы можете даже смешивать и сопоставлять - устанавливать среду рабочего стола на серверном или серверном программном обеспечении, таком как ssh_server или apache2, на основном настольном компьютере.

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

Установщики также ведут себя по-разному, в том смысле, что только «настольная» версия устанавливается из графического Живой компакт-диск. Другие версии устанавливаются с помощью установщика на основе меню, подобного установщику Debian.

8
ответ дан 25 May 2018 в 22:29
  • 1
    По крайней мере, в 10.04, я не могу найти пакет ubuntu-server. Хотя это, возможно, было круто, вы, вероятно, хотите просто установить серверы, которые вы хотите, в любом случае. – Blaisorblade 19 November 2013 в 02:50
  • 2
    Я обновил свой ответ. Для установки пакетов сервера используются задачи (через tasksel), а не метапакеты. Запустите sudo tasksel для пользовательского интерфейса или установите отдельные задачи через командную строку, например sudo tasksel install lamp-server. Список других задач, доступных в help.ubuntu.com/community/Tasksel Обратите внимание, что это группы пакетов, предназначенные для «начальной точки». развертывание сервера. Возможно, вы захотите установить пакеты более детально. – thomasrutter 19 November 2013 в 06:34
  • 3
    Я полностью отстал от цели. Все еще действует в 16.04 LTS. Делает серверные пакеты легко устанавливаемыми, а также Desktop-пакетами. +1 – Terrance 16 January 2017 в 19:39

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

Похожие вопросы: