【问题标题】:Linux bash scripting: sorting a list to useLinux bash 脚本:对要使用的列表进行排序
【发布时间】:2015-08-14 23:16:09
【问题描述】:

我在我的脚本中实现了一个排序功能,但是我在这样做时遇到了麻烦:

我想要达到的目标如下:

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

回声只是一个测试,但我必须以某种方式保存列表。 有什么想法吗?

【问题讨论】:

  • 你在for之前试过sort吗?
  • @ColOfAbRiX 排序函数需要一些东西来排序:它不能直接在列表上工作,所以不,不会这样做。回显的变量现在已排序,但我希望能够将它们放入排序列表中。
  • $SORTEDLISTS 输出是什么?
  • @Kryptonous 在我的回答中,我想您只有 IP 的最后一个数字,即您在命令行上提供的那个。所以你可以对其进行排序并在以后完成完整的IP。或者也许我误解了问题和/或上下文
  • 不,@ColOfAbRiX,你的回答也是正确的。可惜我只能选择一种解决方案!他们俩真的很好。实际上,在我的情况下,您的情况甚至可能会好一些。事实上,我只使用 IP 的最后一个数字。谢谢!

标签: linux bash shell sorting scripting


【解决方案1】:

这个脚本接受命令行参数,每行拆分一个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

【讨论】:

    【解决方案2】:

    $@ 是一个数组(包含所有脚本参数),因此您可以使用排序

    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 哪个字符分隔单词(默认为空格、制表符和换行符)。
    • $'\n' 扩展为一个换行符。当 shell 扩展 $* 时,它现在会在每个元素之间放置一个新行。
    • sort -n &lt;&lt;&lt; 将“每行一个参数”传递给 sort,它按数字排序 (-n)
    • sorted=($(...)) 使用命令 ... 的结果创建一个新数组

    另见:

    【讨论】:

    • 应该在更改 IFS 之前获取一份副本,并在完成后将其更改回来。
    • @User112638726:像这样?
    • 是的,总是最好将东西归还给你找到它们的方式!
    • 我可以用这个"${sorted[@:1]"从第二个参数开始吗?
    • 语法大概是"${sorted[@]:1}"。见unix.stackexchange.com/questions/68322/… 或者你可以在sorted的赋值前使用shift来移除$*中的第一个元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2021-02-07
    • 2021-10-28
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多