在Unix Shell脚本中排序输入
您可以使用“排序”工具,它从标准输入读取和lexicographycally排序每一行。
举个例子,你可以检查:
echo -e "1\n6\n2\n3" | sort -n
,输出:
1
2
3
6
只输出每个数字在单独一行,并通过管道将进入排序
你应该提到排序的'-n`选项,因为问题是关于**数字**排序。 – 2011-02-05 23:27:05
你是对的!忘了那个... – mfontanini 2011-02-06 01:00:21
假设你的投入在$a
,$b
,$c
, $d
你可以这样做
printf "%s\n%s\n%s\n%s\n" $a $b $c $d | sort
您需要读取这些值,然后将它们回显到排序程序。
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
命令更加强大,可以在read
与echo
符号的非便携式(为除bash
)做了提示,以及,边踩着棘手的问题,而不是符号。除了echo
表示法外,所显示的代码可移植到Bourne shell返回到第7版(或第7版)UNIX(其中echo
不是内置的shell,它使用-n
选项)和衍生产品(Korn,Bash,POSIX, ...)。
另一种方式
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
气味像功课 – 2011-02-06 00:41:08
是写一个简单的排序分配程序,或者你可以使用'sort`效用?你试过什么了?尽管问这个问题有点晚。 – 2011-02-06 00:47:32
谢谢你,是的丹尼斯我坚持这个作业和一种困惑,但现在它的罚款:-) – Andy 2011-02-06 11:00:59