Сортировка ввода в Unix Shell Script - PullRequest
0 голосов
/ 06 февраля 2011

Я пытаюсь написать сценарий оболочки Unix, который при выполнении просит пользователя ввести 4 числа, а сценарий отсортирует их численно и распечатает.

Как это можно сделать?

Спасибо за помощь,

Энди

Ответы [ 4 ]

4 голосов
/ 06 февраля 2011

Предположим, что ваши входы находятся в $a, $b, $c, $d, вы можете сделать это

printf "%s\n%s\n%s\n%s\n" $a $b $c $d | sort
3 голосов
/ 06 февраля 2011

другой способ

read -p "Enter 1st number: " a
read -p "Enter 2nd number: " b
read -p "Enter 3rd number: " c
read -p "Enter 4th number: " d
printf "%s\n" $a $b $c $d | sort
1 голос
/ 06 февраля 2011

Вам необходимо прочитать значения и затем передать их в программу сортировки.

echo -n "Enter 1st number: "
read a junk
echo -n "Enter 2nd number: "
read b junk
echo -n "Enter 3rd number: "
read c junk
echo -n "Enter 4th number: "
read d junk
{ echo $a; echo $b; echo $c; echo $d; } | sort -n

Единственная проблема здесь - это обозначение, используемое для подавления перевода строки после команды echo.Есть две нотации - и разные системы используют разные нотации.Старое обозначение - echo -n показано.Более новые обозначения:

echo "Enter Nth number: \c"

То, что вам нужно использовать, зависит от вашей системы, затем.

Переменная 'junk' собирает любые дополнительные слова после первого слова в строке ввода.Это форма паранойи, но это означает, что если пользователь вводит «12 abc», то однобуквенная переменная получает только «12», а не остальные.Код не подтверждает, что пользователь ввел номер.Вы можете написать функцию для этого и использовать ее 4 раза - она ​​также может взять строку приглашения и вернуть число.

Обратите внимание, что если вы используете bash, команда read оченьболее мощный и может также выполнять подсказки, обходя хитрые проблемы с нотацией echo для непереносимых (к bash) нотаций вместо read.За исключением записи echo, показанный код переносим на оболочку Bourne обратно в 7-е издание (или версию 7) UNIX (где echo не была встроенной оболочкой и использовалась опция -n) и производные (Korn, Bash, POSIX, ...).

1 голос
/ 06 февраля 2011

Вы можете использовать утилиту «sort», которая читает из stdin и сортирует каждую строку лексикографически.

В качестве примера вы можете проверить:

echo -e "1\n6\n2\n3" | sort -n

Какие выходы:

1
2
3
6

Просто выведите каждое число в отдельной строке и передайте его в сортировку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...