Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
unixshell脚本中的输入排序_Shell_Unix_Sorting - Fatal编程技术网

unixshell脚本中的输入排序

unixshell脚本中的输入排序,shell,unix,sorting,Shell,Unix,Sorting,我正在尝试编写一个Unix Shell脚本,当执行该脚本时,它要求用户输入4个数字,然后脚本对它们进行数字排序并打印出来 我该怎么做 谢谢你的帮助 Andy您可以使用“sort”实用程序,它从标准输入中读取数据并按字典顺序对每一行进行排序 例如,您可以检查: echo -e "1\n6\n2\n3" | sort -n 哪些产出: 1 2 3 6 只需在单独的一行中输出每个数字,并将其进行排序假设您的输入位于$a,$b,$c,$d中,您就可以这样做 printf "%s\n%s\n%s\n%

我正在尝试编写一个Unix Shell脚本,当执行该脚本时,它要求用户输入4个数字,然后脚本对它们进行数字排序并打印出来

我该怎么做

谢谢你的帮助

Andy

您可以使用“sort”实用程序,它从标准输入中读取数据并按字典顺序对每一行进行排序

例如,您可以检查:

echo -e "1\n6\n2\n3" | sort -n
哪些产出:

1
2
3
6

只需在单独的一行中输出每个数字,并将其进行排序

假设您的输入位于
$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"
那么,您需要使用哪个取决于您的系统

“junk”变量收集输入行中第一个单词之后的任何额外单词。这是一种偏执狂,但意味着如果用户键入'12 abc',那么单字母变量只得到'12',而不是其余的。该代码不验证用户是否输入了数字。您可以编写一个函数来实现这一点,并使用它4次-它还可以接受提示字符串并返回一个数字

请注意,如果您使用
bash
,则
read
命令的功能更强大,并且还可以进行提示,从而避免了
echo
符号在
read
中不可移植(除了
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

您应该提到sort的
-n
选项,因为问题是关于数字排序的。任务是编写一个简单的排序例程,还是可以使用
sort
实用程序?到目前为止你试过什么?虽然现在问这个问题有点晚了。谢谢,是的,丹尼斯。我一直在做这个作业,有点困惑,但现在没事了:-)你也可以写
printf“%s\n”$a$b$c$d…
——printf会重复格式字符串以获取多余的内容arguments@glenn谢谢,我不知道。我一直在使用C中的printf函数语法:)好的,Jonathan,非常感谢,伙计。它在我的系统中运行得非常好:-)