このスクリプトを使用してオンラインでIPを検索します。
#!/bin/sh
set -e
# no args
if [ $# -lt 1 ]; then
echo "Too few args"
echo "Options are:"
echo "-a: Tell me which host is online"
echo "-b: show only list of ip found"
exit 1
fi
# too many args
if [ $# -gt 1 ]; then
echo "$1 option unknown"
echo "Options are:"
echo "-a: Tell me which host is online"
echo "-b: show only list of ip found"
exit 1
fi
case $1 in
-a)
array1=(
`nmap -sP 192.168.0.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'`
)
for i in ${array1[@]};do echo "Ip $i is online";done
;;
-b)
nmap -sP 192.168.0.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'|sort -fn
;;
*)
echo "$1 option unknown"
echo "Options are:"
echo "-a: Tell me which host is online"
echo "-b: show only list of ip found"
;;
esac
ただし、-bを使用すると、次のリストが返されます。
192.168.0.1
192.168.0.11
192.168.0.14
192.168.0.15
192.168.0.17
192.168.0.2
192.168.0.3
192.168.0.44
192.168.0.46
192.168.0.49
192.168.0.50
リストをこのようにソートしたいです。
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.11
192.168.0.14
192.168.0.15
192.168.0.22
192.168.0.44
192.168.0.46
192.168.0.49
192.168.0.50
ソートに関する提案はありますか?
答え1
sort
.
区切られた4番目のフィールドのみに基づいています。
... | sort -t. -k4,4n
-t.
入力フィールド区切り文字を次のように設定します。.
-
-k4,4n
4番目のフィールドのみに基づいてファイルをソートし、n
数値ソートを実装します。
例:
$ cat file.txt
192.168.0.1
192.168.0.11
192.168.0.14
192.168.0.15
192.168.0.17
192.168.0.2
192.168.0.3
192.168.0.44
192.168.0.46
192.168.0.49
192.168.0.50
$ sort -t. -k4,4n file.txt
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.11
192.168.0.14
192.168.0.15
192.168.0.17
192.168.0.44
192.168.0.46
192.168.0.49
192.168.0.50