我想在一个案例(和函数)中用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

现在您可以将变量$arrayfor循环一起使用,如下所示:
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/

10-14 18:35