我想在一个案例(和函数)中用sort
对用户的输入进行排序。
但我以前从没用过这个。我需要使用数组还是什么?
例如,用户会:
bash test.sh 50 20 35 50
通常在我的脚本中,这会发生:
ping c -1 "192.168.0.$i"
结果是
192.168.0.50
192.168.0.20
192.168.0.35
192.168.0.50
现在,我希望最后一个数字被排序,并从最小的数字到最大的数字进行ping操作,例如:20 35 50,如果有两个相同的数字,脚本只ping一次。
SortNumbers(){
}
...
case
-sort ) SortNumbers;;
esac
最佳答案
您可以使用:
#!/bin/bash
array=($(printf '%s\n' "$@"|sort -nu))
echo ${array[@]}
如果运行
test.sh 34 1 45 1 5 6 6 6
,它将给出输出:1 5 6 34 45
现在您可以将变量
$array
与for
循环一起使用,如下所示:for i in ${array[@]};do
#do something with $i
done
说明:
脚本的参数通过管道传输到命令
sort
中,输出被分配到名为array
的数组中。选项-n
用于数字排序,-u
用于唯一排序。假设完整的代码(用于澄清):
#!/bin/bash
array=($(printf '%s\n' "$@"|sort -nu))
for i in ${array[@]};do
ping -c -1 "192.168.0.$i"
done
使用函数:
sortNumbers(){
array=($(printf '%s\n' "$@"|sort -nu))
}
sortNumbers 43 1 2 8 2 4 98 45
echo ${array[@]} ##this is just a sample use, you can put for loop here
因此,可以在脚本开始时声明数组
array=($@)
。然后在需要对参数进行排序时,用参数调用sortNumbers
函数(记住要从参数中排除-sort
)(它将用排序的内容更改变量$array
)。将for循环放在函数外部,这样它就可以接受变量$array
(排序或未排序)中的任何内容,这样您就可以按照自己的方式进行排序(选择是否排序)。关于linux - 在Linux中使用-sort,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30818251/