在Unix Shell脚本中排序输入

时间:2011-02-05 23:14:24

标签: shell unix sorting

我正在尝试编写一个Unix Shell脚本,在执行时会要求用户输入4个数字,然后脚本按数字排序并打印出来。

我该怎么做?

感谢您的帮助,

安迪

4 个答案:

答案 0 :(得分:4)

假设您的输入位于$a$b$c$d,您可以执行此操作

printf "%s\n%s\n%s\n%s\n" $a $b $c $d | sort

答案 1 :(得分:3)

另一种方式

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

答案 2 :(得分:1)

您可以使用“排序”实用程序,该实用程序从标准输入读取并按字典顺序对每行进行排序。

例如,您可以查看:

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

哪个输出:

1
2
3
6

只需在单独的一行输出每个数字,然后将其输入到排序

答案 3 :(得分:1)

您需要读取值,然后将它们回显到排序程序。

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"

您需要使用哪个取决于您的系统。

'垃圾'变量收集输入行上第一个单词后面的任何多余单词。它是一种偏执狂,但意味着如果用户键入' 12 abc'那么单字母变量只会得到' 12' 12' 12'而不是其余的。该代码不会验证用户是否输入了数字。您可以编写一个函数来执行此操作,并使用它4次 - 它也可以使用提示字符串并返回一个数字。

请注意,如果您使用bash,则read命令功能更强大,并且可以执行提示,对于非便携式的echo符号,这是一个侧面棘手的棘手问题(取而代之的是bash中除read之外的其他符号。除了echo表示法之外,显示的代码可以移植到Bourne shell,返回到第7版(或版本7)UNIX(其中echo不是内置的shell,它使用{{1} }选项)和衍生物(Korn,Bash,POSIX,......)。