簡體   English   中英

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使用for var in $SORTEDLIST do <ping-command> done

我已經有了這個:

    SORTEDLIST="$SORTEDLISTS $@"
    for var in $SORTEDLISTS
    do
            echo "$var"
    done | sort -n -u

回聲只是一個測試,但我必須以某種方式保存列表。 有任何想法嗎?

$@是一個數組(包含所有腳本參數),因此您可以使用

OIFS="$IFS" # save IFS
IFS=$'\n' sorted=($(sort -n <<<"$*"))
IFS="$OIFS" # restore IFS

然后像這樣使用結果:

for I in "${sorted[@]}"; do
    ...
done

解釋:

  • IFS是一個內部 shell 變量(內部字段分隔符),它告訴 shell 哪個字符分隔單詞(默認為空格、制表符和換行符)。
  • $'\\n'擴展為單個換行符。 當 shell 展開$* ,它現在將在每個元素之間放置一個新行。
  • sort -n <<<管道“每行一個參數”來sort哪個數字sort-n
  • sorted=($(...))使用命令的結果創建一個新數組...

也可以看看:

此腳本采用命令行參數,將它們每行拆分一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM