huangcm
2024-12-18 9d29be7f7249789d6ffd0440067187a9f040c2cd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/sh
#$Id$
 
#
# Script created by: Stephen R. van den Berg <srb@cuci.nl>, 1999/04/18
# Donated to the public domain.
#
# This script transforms the output of "ip" into more readable text.
# "ip" is the Linux-advanced-routing configuration tool part of the
# iproute package.
#
 
test "X-h" = "X$1" && echo "Usage: $0 [tablenr [raw ip args...]]" && exit 64
 
test -z "$*" && set 0
 
ip route list table "$@" |
 while read network rest
 do set xx $rest
    shift
    proto=""
    via=""
    dev=""
    scope=""
    src=""
    table=""
    case $network in
       broadcast|local|unreachable) via=$network
          network=$1
          shift
          ;;
    esac
    while test $# != 0
    do
       case "$1" in
          proto|via|dev|scope|src|table)
             key=$1
             val=$2
             eval "$key='$val'"
             shift 2
             ;;
          dead|onlink|pervasive|offload|notify|linkdown|unresolved)
             shift
             ;;
          *)
             # avoid infinite loop on unknown keyword without value at line end
             shift
             shift
             ;;
       esac
    done
    echo "$network    $via    $src    $proto    $scope    $dev    $table"
 done | awk -F '    ' '
BEGIN {
   format="%15s%-3s %15s %15s %8s %8s%7s %s\n";
   printf(format,"target","","gateway","source","proto","scope","dev","tbl");
 }
 { network=$1;
   mask="";
   if(match(network,"/"))
    { mask=" "substr(network,RSTART+1);
      network=substr(network,0,RSTART);
    }
   via=$2;
   src=$3;
   proto=$4;
   scope=$5;
   dev=$6;
   table=$7;
   printf(format,network,mask,via,src,proto,scope,dev,table);
 }
'