2011-02-05 124 views
0

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

我该怎么做?

感谢你的帮助,

安迪

+1

气味像功课 – 2011-02-06 00:41:08

+0

是写一个简单的排序分配程序,或者你可以使用'sort`效用?你试过什么了?尽管问这个问题有点晚。 – 2011-02-06 00:47:32

+0

谢谢你,是的丹尼斯我坚持这个作业和一种困惑,但现在它的罚款:-) – Andy 2011-02-06 11:00:59

回答

1

您可以使用“排序”工具,它从标准输入读取和lexicographycally排序每一行。

举个例子,你可以检查:

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

,输出:

1 
2 
3 
6 

只输出每个数字在单独一行,并通过管道将进入排序

+0

你应该提到排序的'-n`选项,因为问题是关于**数字**排序。 – 2011-02-05 23:27:05

+0

你是对的!忘了那个... – mfontanini 2011-02-06 01:00:21

4

假设你的投入在$a,$b,$c, $d你可以这样做

printf "%s\n%s\n%s\n%s\n" $a $b $c $d | sort 
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',而不是其他的。该代码不验证用户输入了一个数字。你可以编写一个函数来做到这一点,并使用它4次 - 它可能会采取提示字符串并返回一个数字。

请注意,如果您使用bash,该read命令更加强大,可以在readecho符号的非便携式(为除bash)做了提示,以及,边踩着棘手的问题,而不是符号。除了echo表示法外,所显示的代码可移植到Bourne shell返回到第7版(或第7版)UNIX(其中echo不是内置的shell,它使用-n选项)和衍生产品(Korn,Bash,POSIX, ...)。

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