Linux bash 脚本:对要使用的列表进行排序
Linux bash scripting: sorting a list to use
我正在我的脚本中实现一个排序函数,但我在这样做时遇到了问题:
我想要实现的是:
bash script --sort 44 55 1 23 44
输出:
Pinging to 192.168.1.1 succes
Pinging to 192.168.1.23 failed
Pinging to 192.168.1.44 failed
Pinging to 192.168.1.55 failed
ping 和其他东西已经工作了,我只是不知道如何用参数制作一个列表,对它们进行排序并(保存列表)然后 在ping 命令(通过使用 for var in $SORTEDLIST do <ping-command> done
.
我已经有了这个:
SORTEDLIST="$SORTEDLISTS $@"
for var in $SORTEDLISTS
do
echo "$var"
done | sort -n -u
回声只是一个测试,但我必须以某种方式保存列表。
有什么想法吗?
此脚本接受命令行参数,每行将它们分开 tr ' ' '\n'
,按数字排序 tr ' ' '\n'
并打印它们:
#!/bin/bash
LIST="$@"
for I in $(echo "$LIST" | tr ' ' '\n' | sort -g)
do
echo $I
echo "192.168.0.1.$I"
done
$@
是一个数组(包含所有脚本参数),因此您可以使用
进行排序
OIFS="$IFS" # save IFS
IFS=$'\n' sorted=($(sort -n <<<"$*"))
IFS="$OIFS" # restore IFS
然后像这样使用结果:
for I in "${sorted[@]}"; do
...
done
解释:
IFS
是一个内部 shell 变量 (internal field separator),它告诉 shell 哪个字符分隔单词(默认为 space、制表符和换行符).
$'\n'
扩展为单个换行符。当 shell 展开 $*
时,它现在会在每个元素之间换行。
sort -n <<<
通过管道将 "one argument per line" 传递给 sort
,后者按数字排序 (-n
)
sorted=($(...))
使用命令 ...
的结果创建一个新数组
另请参阅:
- How to sort an array in BASH
我正在我的脚本中实现一个排序函数,但我在这样做时遇到了问题:
我想要实现的是:
bash script --sort 44 55 1 23 44
输出:
Pinging to 192.168.1.1 succes
Pinging to 192.168.1.23 failed
Pinging to 192.168.1.44 failed
Pinging to 192.168.1.55 failed
ping 和其他东西已经工作了,我只是不知道如何用参数制作一个列表,对它们进行排序并(保存列表)然后 在ping 命令(通过使用 for var in $SORTEDLIST do <ping-command> done
.
我已经有了这个:
SORTEDLIST="$SORTEDLISTS $@"
for var in $SORTEDLISTS
do
echo "$var"
done | sort -n -u
回声只是一个测试,但我必须以某种方式保存列表。 有什么想法吗?
此脚本接受命令行参数,每行将它们分开 tr ' ' '\n'
,按数字排序 tr ' ' '\n'
并打印它们:
#!/bin/bash
LIST="$@"
for I in $(echo "$LIST" | tr ' ' '\n' | sort -g)
do
echo $I
echo "192.168.0.1.$I"
done
$@
是一个数组(包含所有脚本参数),因此您可以使用
OIFS="$IFS" # save IFS
IFS=$'\n' sorted=($(sort -n <<<"$*"))
IFS="$OIFS" # restore IFS
然后像这样使用结果:
for I in "${sorted[@]}"; do
...
done
解释:
IFS
是一个内部 shell 变量 (internal field separator),它告诉 shell 哪个字符分隔单词(默认为 space、制表符和换行符).$'\n'
扩展为单个换行符。当 shell 展开$*
时,它现在会在每个元素之间换行。sort -n <<<
通过管道将 "one argument per line" 传递给sort
,后者按数字排序 (-n
)sorted=($(...))
使用命令...
的结果创建一个新数组
另请参阅:
- How to sort an array in BASH