Commit 86fa5b810af641a5e53edbd26571ec84889fe065

Authored by Georg Hopp
1 parent b382bfa3

seperate original script in several of special purpose and implement some kind o…

…f include_once for sourcing scripts only once
  1 +#!/bin/dash
  2 +
  3 +##
  4 +# This creates function that will gather some system informations
  5 +# and propagate them as environment variables.
  6 +#
  7 +
  8 +. ./utils.sh
  9 +
  10 +##
  11 +# retrieve interfaces. I prefer using ip if it is
  12 +# available, else I fallback to ifconfig... don't know
  13 +# how to retrieve this information on other systems.
  14 +# This also exports the environment variables.
  15 +#
  16 +get_interface_data() {
  17 + local NO=1
  18 +
  19 + if [ ${IP} ]
  20 + then
  21 + get_interface_data_ip
  22 + else
  23 + if [ ${IFCONFIG} ]
  24 + then
  25 + get_interface_data_ifconfig
  26 + else
  27 + ${LOGGER} -p local0.warn 'Found no way to retrieve interface information.'
  28 + fi
  29 + fi
  30 +
  31 + export NINTERFACES
  32 + export CLASSES
  33 +
  34 + while [ ${NO} -le ${NINTERFACES:=0} ]
  35 + do
  36 + export IF${NO}_NAME IF${NO}_MAC IF${NO}_STATE IF${NO}_IPV4 IF${NO}_IPV6
  37 + NO=$((NO+1))
  38 + done
  39 +}
  40 +
  41 +##
  42 +# get the interface information from the ip tool
  43 +#
  44 +get_interface_data_ip() {
  45 + eval $(${IP} -o link | ${AWK} '{
  46 + sub(/:/,"",$1);
  47 + no=$1;
  48 + sub(/:/,"",$2);
  49 + name=$2;
  50 + for (i=3; i<NF; i++) {
  51 + if ($i == "state") {
  52 + i++; state=$i
  53 + }
  54 + if ($i ~ /link/) {
  55 + i++; mac=$i;
  56 + classes=classes mac " "
  57 + }
  58 + }
  59 + print "IF" no "_NAME=" name ";IF" no "_STATE=" state ";IF" no "_MAC=" mac ";";
  60 + if ("UP" == state) classes=classes mac " "
  61 + }
  62 + BEGIN {
  63 + classes=""
  64 + }
  65 + END {
  66 + print "CLASSES=\"${CLASSES}" classes " \";";
  67 + print "NINTERFACES=" FNR ";"
  68 + }')
  69 +
  70 + eval $(${IP} -o addr | ${AWK} '{
  71 + sub(/:/,"",$1);
  72 + no=$1;
  73 + if ($3 == "inet") {
  74 + sub(/[\/%].*/,"",$4);
  75 + print "IF" no "_IPV4=\"${IF" no "_IPV4}" $4 " \";";
  76 + classes=classes $4 " "
  77 + }
  78 + if ($3 == "inet6") {
  79 + sub(/[\/%].*/,"",$4);
  80 + print "IF" no "_IPV6=\"${IF" no "_IPV6}" $4 " \";";
  81 + classes=classes $4 " "
  82 + }
  83 + }
  84 + BEGIN {
  85 + classes=""
  86 + }
  87 + END {
  88 + print "CLASSES=\"${CLASSES}" classes " \";"
  89 + }')
  90 +}
  91 +
  92 +##
  93 +# get interface data via the ifconfig tool
  94 +#
  95 +get_interface_data_ifconfig() {
  96 + eval $(${IFCONFIG} -a | ${AWK} '
  97 + /ether/ { mac=$2 }
  98 + /inet / { ipv4=ipv4 $2 " " }
  99 + /inet6/ { ipv6=ipv6 $2 " " }
  100 + /^[^ \t]/ {
  101 + if ("" != ipv4 || "" != ipv6) state="UP"; else state="DOWN";
  102 + if ("" != name) {
  103 + print "IF" no "_NAME=" name ";IF" no "_STATE=" state ";IF" no "_MAC=" mac ";" \
  104 + "IF" no "_IPV4=\"${IF" no "_IPV4}" ipv4 " \";" \
  105 + "IF" no "_IPV6=\"${IF" no "_IPV6}" ipv6 " \";";
  106 + no++;
  107 + }
  108 + ipv4=ipv6="";
  109 + sub(/:/,"",$1);
  110 + name=$1
  111 + }
  112 + BEGIN {
  113 + no=1;
  114 + }
  115 + END {
  116 + if ("" != ipv4 || "" != ipv6) state="UP"; else state="DOWN";
  117 + print "IF" no "_NAME=" name ";IF" no "_STATE=" state ";IF" no "_MAC=" mac ";" \
  118 + "IF" no "_IPV4=\"${IF" no "_IPV4}" ipv4 " \";" \
  119 + "IF" no "_IPV6=\"${IF" no "_IPV6}" ipv6 " \";";
  120 + print "NINTERFACES=" no
  121 + }')
  122 +}
  123 +
  124 +##
  125 +# autorun this if sourced.
  126 +#
  127 +
  128 +[ -z "${NINTERFACES}" ] && get_interface_data
  129 +
  130 +# vim: set ts=4 sw=4:
  1 +#!/bin/dash
  2 +
  3 +. ./utils.sh
  4 +
  5 +##
  6 +# Function calculates number of bit in a netmask
  7 +#
  8 +mask2cidr() {
  9 + local NBITS=0
  10 + local OLDIFS="${IFS}"
  11 + IFS=.
  12 +
  13 + for DEC in $1
  14 + do
  15 + case ${DEC} in
  16 + 255) NBITS=$((NBITS+8));;
  17 + 254) NBITS=$((NBITS+7));;
  18 + 252) NBITS=$((NBITS+6));;
  19 + 248) NBITS=$((NBITS+5));;
  20 + 240) NBITS=$((NBITS+4));;
  21 + 224) NBITS=$((NBITS+3));;
  22 + 192) NBITS=$((NBITS+2));;
  23 + 128) NBITS=$((NBITS+1));;
  24 + 0);;
  25 + *) NBITS=0; IFS="${OLDIFS}"; return 1
  26 + esac
  27 + done
  28 + IFS="${OLDIFS}"
  29 + ${ECHO} "${NBITS}"
  30 +}
  31 +
  32 +##
  33 +# Function calculates a netmask from number of bits
  34 +#
  35 +cidr2mask() {
  36 + local I MASK=""
  37 + local FULL_OCTETS=$((${1}/8))
  38 + local PARTIAL_OCTET=$((${1}%8))
  39 +
  40 + for I in 0 1 2 3
  41 + do
  42 + if [ ${I} -lt ${FULL_OCTETS} ]
  43 + then
  44 + MASK="${MASK}255"
  45 + elif [ ${I} -eq ${FULL_OCTETS} ]
  46 + then
  47 + MASK="${MASK}$((256-(1<<(8-${PARTIAL_OCTET}))))"
  48 + else
  49 + MASK="${MASK}0"
  50 + fi
  51 + [ ${I} -lt 3 ] && MASK="${MASK}."
  52 + done
  53 +
  54 + ${ECHO} ${MASK}
  55 +}
  56 +
  57 +# vim: set ts=4 sw=4:
  1 +#!/bin/dash
  2 +
  3 +##
  4 +# This is a first test what static informations I can gather from a
  5 +# system. The minimal requirement are the IP addresses because
  6 +# on these I build up my classes.
  7 +# The system type is also important...we might need to be running
  8 +# on variuous UNIX flavours. (But for now we focus on various linux
  9 +# flavours and maybe FreeBSD.
  10 +#
  11 +
  12 +. ./utils.sh
  13 +include_once ./system_information.sh
  14 +include_once ../sysman/interface_information.sh
  15 +include_once /home/ghopp/sysman/network_tools.sh
  16 +
  17 +##
  18 +# report everysthing
  19 +#
  20 +
  21 +${PRINTF} "%15s : %s\n" "OS" "${OS}"
  22 +${PRINTF} "%15s : %s\n" "KERNEL" "${KERNEL}"
  23 +${PRINTF} "%15s : %s\n" "VERSION" "${VERSION}"
  24 +${PRINTF} "%15s : %s\n" "PLATFORM" "${PLATFORM}"
  25 +${PRINTF} "%15s : %s\n" "DIST" "${DIST}"
  26 +${PRINTF} "%15s : %s\n" "HOSTNAME" "${HOSTNAME}"
  27 +${PRINTF} "%15s : %s\n" "# INTERFACES" "${NINTERFACES}"
  28 +
  29 +NO=1
  30 +while [ ${NO} -le ${NINTERFACES:=0} ]
  31 +do
  32 + eval printf \"%15s : %s\\\n\" \"IF${NO}_NAME\" \"\${IF${NO}_NAME}\"
  33 + eval printf \"%15s : %s\\\n\" \"IF${NO}_MAC\" \"\${IF${NO}_MAC}\"
  34 + eval printf \"%15s : %s\\\n\" \"IF${NO}_STATE\" \"\${IF${NO}_STATE}\"
  35 + eval printf \"%15s : %s\\\n\" \"IF${NO}_IPV4\" \"\${IF${NO}_IPV4}\"
  36 + eval printf \"%15s : %s\\\n\" \"IF${NO}_IPV6\" \"\${IF${NO}_IPV6}\"
  37 + NO=$((NO+1))
  38 +done
  39 +
  40 +${PRINTF} "%15s : %s\n" "CLASSES" "${CLASSES}"
  41 +
  42 +echo
  43 +echo $(mask2cidr 255.255.128.0)
  44 +echo $(cidr2mask 17)
  45 +eval echo \$\(cidr2mask $(mask2cidr 255.255.128.0)\)
  46 +
1 #!/bin/dash 1 #!/bin/dash
2 2
3 ## 3 ##
4 -# This is a first test what static informations I can gather from a  
5 -# system. The minimal requirement are the IP addresses because  
6 -# on these I build up my classes.  
7 -# The system type is also important...we might need to be running  
8 -# on variuous UNIX flavours. (But for now we focus on various linux  
9 -# flavours and maybe FreeBSD. 4 +# This creates function that will gather some system informations
  5 +# and propagate them as environment variables.
10 # 6 #
11 7
12 -  
13 -# Function calculates number of bit in a netmask  
14 -#  
15 -mask2cidr() {  
16 - local NBITS=0  
17 - local OLDIFS="${IFS}"  
18 - IFS=.  
19 -  
20 - for DEC in $1  
21 - do  
22 - case ${DEC} in  
23 - 255) NBITS=$((NBITS+8));;  
24 - 254) NBITS=$((NBITS+7));;  
25 - 252) NBITS=$((NBITS+6));;  
26 - 248) NBITS=$((NBITS+5));;  
27 - 240) NBITS=$((NBITS+4));;  
28 - 224) NBITS=$((NBITS+3));;  
29 - 192) NBITS=$((NBITS+2));;  
30 - 128) NBITS=$((NBITS+1));;  
31 - 0);;  
32 - *) NBITS=0; IFS="${OLDIFS}"; return 1  
33 - esac  
34 - done  
35 - IFS="${OLDIFS}"  
36 - ${ECHO} "${NBITS}"  
37 -}  
38 -  
39 -cidr2mask() {  
40 - local MASK=""  
41 - local FULL_OCTETS=$((${1}/8))  
42 - local PARTIAL_OCTET=$((${1}%8))  
43 -  
44 - for I in 0 1 2 3  
45 - do  
46 - if [ ${I} -lt ${FULL_OCTETS} ]  
47 - then  
48 - MASK="${MASK}255"  
49 - elif [ ${I} -eq ${FULL_OCTETS} ]  
50 - then  
51 - MASK="${MASK}$((256-(1<<(8-${PARTIAL_OCTET}))))"  
52 - else  
53 - MASK="${MASK}0"  
54 - fi  
55 - ${TEST} ${I} -lt 3 && MASK="${MASK}."  
56 - done  
57 -  
58 - ${ECHO} ${MASK}  
59 -}  
60 -  
61 -##  
62 -# retrieve interfaces. I prefer using ip if it is  
63 -# available, else I fallback to ifconfig... don't know  
64 -# how to retrieve this information on other systems.  
65 -#  
66 -get_if_data() {  
67 - if [ ${IP} ]  
68 - then  
69 - eval $(${IP} -o link | ${AWK} '{  
70 - sub(/:/,"",$1);  
71 - no=$1;  
72 - sub(/:/,"",$2);  
73 - name=$2;  
74 - for (i=3; i<NF; i++) {  
75 - if ($i == "state") {  
76 - i++; state=$i  
77 - }  
78 - if ($i ~ /link/) {  
79 - i++; mac=$i;  
80 - classes=classes mac " "  
81 - }  
82 - }  
83 - print "IF" no "_NAME=" name ";IF" no "_STATE=" state ";IF" no "_MAC=" mac ";";  
84 - if ("UP" == state) classes=classes mac " "  
85 - }  
86 - BEGIN {  
87 - classes=""  
88 - }  
89 - END {  
90 - print "CLASSES=\"${CLASSES}" classes " \";";  
91 - print "NINTERFACES=" FNR ";"  
92 - }')  
93 -  
94 - eval $(${IP} -o addr | ${AWK} '{  
95 - sub(/:/,"",$1);  
96 - no=$1;  
97 - if ($3 == "inet") {  
98 - sub(/[\/%].*/,"",$4);  
99 - print "IF" no "_IPV4=\"${IF" no "_IPV4}" $4 " \";";  
100 - classes=classes $4 " "  
101 - }  
102 - if ($3 == "inet6") {  
103 - sub(/[\/%].*/,"",$4);  
104 - print "IF" no "_IPV6=\"${IF" no "_IPV6}" $4 " \";";  
105 - classes=classes $4 " "  
106 - }  
107 - }  
108 - BEGIN {  
109 - classes=""  
110 - }  
111 - END {  
112 - print "CLASSES=\"${CLASSES}" classes " \";"  
113 - }')  
114 - else  
115 - if [ ${IFCONFIG} ]  
116 - then  
117 - #eval $(${IFCONFIG} -a | ${AWK} '{  
118 - eval $(ifconfig -a | awk '  
119 - /ether/ { mac=$2 }  
120 - /inet / { ipv4=ipv4 $2 " " }  
121 - /inet6/ { ipv6=ipv6 $2 " " }  
122 - /^[^ \t]/ {  
123 - if ("" != ipv4 || "" != ipv6) state="UP"; else state="DOWN";  
124 - if ("" != name) {  
125 - print "IF" no "_NAME=" name ";IF" no "_STATE=" state ";IF" no "_MAC=" mac ";" \  
126 - "IF" no "_IPV4=\"${IF" no "_IPV4}" ipv4 " \";" \  
127 - "IF" no "_IPV6=\"${IF" no "_IPV6}" ipv6 " \";";  
128 - no++;  
129 - }  
130 - ipv4=ipv6="";  
131 - sub(/:/,"",$1);  
132 - name=$1  
133 - }  
134 - BEGIN {  
135 - no=1;  
136 - }  
137 - END {  
138 - if ("" != ipv4 || "" != ipv6) state="UP"; else state="DOWN";  
139 - print "IF" no "_NAME=" name ";IF" no "_STATE=" state ";IF" no "_MAC=" mac ";" \  
140 - "IF" no "_IPV4=\"${IF" no "_IPV4}" ipv4 " \";" \  
141 - "IF" no "_IPV6=\"${IF" no "_IPV6}" ipv6 " \";";  
142 - print "NINTERFACES=" no  
143 - }')  
144 - else  
145 - ${LOGGER} -p local0.warn 'Found no way to retrieve interface information.'  
146 - fi  
147 - fi  
148 -} 8 +. ./utils.sh
149 9
150 ## 10 ##
151 -# start guessing the system type  
152 -# 1. get informations via uname 11 +# start guessing the system type via uname and export it.
153 # 12 #
154 get_host_info() { 13 get_host_info() {
155 OS="$(${UNAME} -o)" 14 OS="$(${UNAME} -o)"
@@ -159,6 +18,8 @@ get_host_info() { @@ -159,6 +18,8 @@ get_host_info() {
159 HOSTNAME="$(${UNAME} -n)" 18 HOSTNAME="$(${UNAME} -n)"
160 CLASSES="$(${ECHO} -e "${OS}\n${KERNEL}\n${VERSION}\n${PLATFORM}\n${HOSTNAME}" |\ 19 CLASSES="$(${ECHO} -e "${OS}\n${KERNEL}\n${VERSION}\n${PLATFORM}\n${HOSTNAME}" |\
161 ${SORT} -u | ${TR} "\n" " ")" 20 ${SORT} -u | ${TR} "\n" " ")"
  21 +
  22 + export OS KERNEL VERSION PLATFORM HOSTNAME CLASSES
162 } 23 }
163 24
164 ## 25 ##
@@ -186,10 +47,7 @@ get_host_info() { @@ -186,10 +47,7 @@ get_host_info() {
186 # the file. 47 # the file.
187 # 48 #
188 get_dist_info() { 49 get_dist_info() {
189 - if [ -z "${KERNEL}" ]  
190 - then  
191 - get_host_info  
192 - fi 50 + [ -z "${KERNEL}" ] && get_host_info
193 51
194 if [ "Linux" = "${KERNEL}" ] 52 if [ "Linux" = "${KERNEL}" ]
195 then 53 then
@@ -229,7 +87,7 @@ get_dist_info() { @@ -229,7 +87,7 @@ get_dist_info() {
229 87
230 for DIR in ${FILES} 88 for DIR in ${FILES}
231 do 89 do
232 - ${TEST} -f ${DIR} || CHK=$((CHK&~CUR)) 90 + [ -f ${DIR} ] || CHK=$((CHK&~CUR))
233 done 91 done
234 92
235 CUR=$((CUR*2)) 93 CUR=$((CUR*2))
@@ -237,16 +95,16 @@ get_dist_info() { @@ -237,16 +95,16 @@ get_dist_info() {
237 95
238 DIST="Unknown" 96 DIST="Unknown"
239 97
240 - ${TEST} ${CHK} -eq ${SUSE} && DIST="Suse"  
241 - ${TEST} ${CHK} -eq ${REDHAT} && DIST="Redhat"  
242 - ${TEST} ${CHK} -eq ${FEDORA} && DIST="Fedora"  
243 - ${TEST} ${CHK} -eq ${SLACKWARE} && DIST="Slakware"  
244 - ${TEST} ${CHK} -eq ${DEBIAN} && DIST="Debian"  
245 - ${TEST} ${CHK} -eq ${MANDRAKE} && DIST="Mandrake"  
246 - ${TEST} ${CHK} -eq ${YELLOWDOG} && DIST="Yellowdog"  
247 - ${TEST} ${CHK} -eq ${SUNJDS} && DIST="Sun"  
248 - ${TEST} ${CHK} -eq ${GENTOO} && DIST="Gentoo"  
249 - ${TEST} ${CHK} -eq ${SOLARIS} && DIST="Solaris" 98 + [ ${CHK} -eq ${SUSE} ] && DIST="Suse"
  99 + [ ${CHK} -eq ${REDHAT} ] && DIST="Redhat"
  100 + [ ${CHK} -eq ${FEDORA} ] && DIST="Fedora"
  101 + [ ${CHK} -eq ${SLACKWARE} ] && DIST="Slakware"
  102 + [ ${CHK} -eq ${DEBIAN} ] && DIST="Debian"
  103 + [ ${CHK} -eq ${MANDRAKE} ] && DIST="Mandrake"
  104 + [ ${CHK} -eq ${YELLOWDOG} ] && DIST="Yellowdog"
  105 + [ ${CHK} -eq ${SUNJDS} ] && DIST="Sun"
  106 + [ ${CHK} -eq ${GENTOO} ] && DIST="Gentoo"
  107 + [ ${CHK} -eq ${SOLARIS} ] && DIST="Solaris"
250 108
251 if [ 'Unknown' != "${DIST}" ] 109 if [ 'Unknown' != "${DIST}" ]
252 then 110 then
@@ -257,59 +115,14 @@ get_dist_info() { @@ -257,59 +115,14 @@ get_dist_info() {
257 else 115 else
258 DIST="${OS}" 116 DIST="${OS}"
259 fi 117 fi
260 -}  
261 118
262 -##  
263 -# Here now starts the usage of the functions defined above.  
264 -#  
265 -  
266 -##  
267 -# first specify some programs  
268 -#  
269 -WHICH="/usr/bin/which"  
270 -UNAME="$(${WHICH} uname)"  
271 -TEST="$(${WHICH} test)"  
272 -GREP="$(${WHICH} grep)"  
273 -AWK="$(${WHICH} awk)"  
274 -ECHO="$(${WHICH} echo)"  
275 -SORT="$(${WHICH} sort)"  
276 -TR="$(${WHICH} tr)"  
277 -PRINTF="$(${WHICH} printf)"  
278 -LOGGER="$(${WHICH} logger)"  
279 -IP="$(${WHICH} ip)"  
280 -IFCONFIG="$(${WHICH} ifconfig)"  
281 -  
282 -get_dist_info  
283 -get_if_data 119 + export DIST CLASSES
  120 +}
284 121
285 ## 122 ##
286 -# report everysthing 123 +# autorun this if sourced.
287 # 124 #
288 125
289 -${PRINTF} "%15s : %s\n" "OS" "${OS}"  
290 -${PRINTF} "%15s : %s\n" "KERNEL" "${KERNEL}"  
291 -${PRINTF} "%15s : %s\n" "VERSION" "${VERSION}"  
292 -${PRINTF} "%15s : %s\n" "PLATFORM" "${PLATFORM}"  
293 -${PRINTF} "%15s : %s\n" "DIST" "${DIST}"  
294 -${PRINTF} "%15s : %s\n" "HOSTNAME" "${HOSTNAME}"  
295 -${PRINTF} "%15s : %s\n" "# INTERFACES" "${NINTERFACES}"  
296 -  
297 -NO=1  
298 -while [ ${NO} -le ${NINTERFACES:=0} ]  
299 -do  
300 - eval printf \"%15s : %s\\\n\" \"IF${NO}_NAME\" \"\${IF${NO}_NAME}\"  
301 - eval printf \"%15s : %s\\\n\" \"IF${NO}_MAC\" \"\${IF${NO}_MAC}\"  
302 - eval printf \"%15s : %s\\\n\" \"IF${NO}_STATE\" \"\${IF${NO}_STATE}\"  
303 - eval printf \"%15s : %s\\\n\" \"IF${NO}_IPV4\" \"\${IF${NO}_IPV4}\"  
304 - eval printf \"%15s : %s\\\n\" \"IF${NO}_IPV6\" \"\${IF${NO}_IPV6}\"  
305 - NO=$((NO+1))  
306 -done  
307 -  
308 -${PRINTF} "%15s : %s\n" "CLASSES" "${CLASSES}"  
309 -  
310 -echo  
311 -echo $(mask2cidr 255.255.128.0)  
312 -echo $(cidr2mask 17)  
313 -eval echo \$\(cidr2mask $(mask2cidr 255.255.128.0)\) 126 +[ -z "${DIST}" ] && get_dist_info
314 127
315 # vim: set ts=4 sw=4: 128 # vim: set ts=4 sw=4:
  1 +#!/bin/dash
  2 +
  3 +##
  4 +# make definitions only when not already defined
  5 +#
  6 +
  7 +command -v filename2symbol >/dev/null
  8 +if [ $? -ne 0 ]
  9 +then
  10 + filename2symbol() {
  11 + local SYM="${1}"
  12 +
  13 + if [ 1 -ne $# ]
  14 + then
  15 + logger -p syslog.err 'filename2sybol: missing filename'
  16 + exit 1
  17 + fi
  18 +
  19 + while [ "${SYM}" != "${SYM%/*}" -o "${SYM}" != "${SYM%.*}" ]
  20 + do
  21 + if [ "${SYM}" != "${SYM%.*}" ]
  22 + then
  23 + SYM="${SYM%%.*}_${SYM#*.}"
  24 + else
  25 + SYM="${SYM%%/*}_${SYM#*/}"
  26 + fi
  27 + done
  28 +
  29 + echo "${SYM}"
  30 + }
  31 +
  32 + canonify_name() {
  33 + local FILE="${1}"
  34 + local DIR="${PWD}"
  35 +
  36 + # if FILE starts with a / its already canonified
  37 + if [ "${FILE}" != ${FILE#/} ]
  38 + then
  39 + echo "${FILE}"
  40 + return 0
  41 + fi
  42 +
  43 + # simply remove ./ and make a ../ remove a part from pwd
  44 + while [ "${FILE}" != ${FILE#./} -o "${FILE}" != ${FILE#../} ]
  45 + do
  46 + if [ "${FILE}" != ${FILE#./} ]
  47 + then
  48 + FILE="${FILE#./}"
  49 + else
  50 + FILE="${FILE#../}"
  51 + DIR="${DIR%/*}"
  52 + fi
  53 + done
  54 +
  55 + echo "${DIR}/${FILE}"
  56 + }
  57 +
  58 + include_once() {
  59 + local FILE="$(canonify_name "${1}")"
  60 + local SYM="$(filename2symbol "${FILE}")"
  61 +
  62 + if [ 1 -ne $# ]
  63 + then
  64 + logger -p syslog.err 'include_once: missing filename'
  65 + exit 1
  66 + fi
  67 +
  68 + if eval [ -z \"\${SOURCED_${SYM}}\" ]
  69 + then
  70 + . ${FILE}
  71 + eval export SOURCED_${SYM}=\"\${FILE}\"
  72 + fi
  73 + }
  74 +
  75 + ##
  76 + # get and export the locations of used programs and export them
  77 + # I assume that on every UNIX/shell variant at least [ is globally
  78 + # available. I will use it throughout all other scripts without
  79 + # checking for existence.
  80 + # I also assume through all scripts that eval is available.
  81 + #
  82 + [ -z "${WHICH}" ] && WHICH="/usr/bin/which"
  83 + [ -z "${UNAME}" ] && UNAME="$(${WHICH} uname)"
  84 + [ -z "${GREP}" ] && GREP="$(${WHICH} grep)"
  85 + [ -z "${AWK}" ] && AWK="$(${WHICH} awk)"
  86 + [ -z "${ECHO}" ] && ECHO="$(${WHICH} echo)"
  87 + [ -z "${SORT}" ] && SORT="$(${WHICH} sort)"
  88 + [ -z "${TR}" ] && TR="$(${WHICH} tr)"
  89 + [ -z "${PRINTF}" ] && PRINTF="$(${WHICH} printf)"
  90 + [ -z "${LOGGER}" ] && LOGGER="$(${WHICH} logger)"
  91 + [ -z "${IP}" ] && IP="$(${WHICH} ip)"
  92 + [ -z "${IFCONFIG}" ] && IFCONFIG="$(${WHICH} ifconfig)"
  93 +
  94 + export WHICH UNAME GREP AWK ECHO SORT TR PRINTF LOGGER IP IFCONFIG
  95 +fi
  96 +
  97 +# vim: set ts=4 sw=4:
Please register or login to post a comment