- Geofferey
, ...
await-ipv4-address.sh
#!/usr/bin/env bash
await_ipv4_address(){
local _interface="${1:?# Parameter_Error: ${FUNCNAME[0]} not provided an interface}"
local _sleep_interval="${2:-1}"
local _loop_limit="${3:-10}"
if [ "${_sleep_interval}" -lt '0' ] || [ "${_loop_limit}" -le '0' ]; then
printf 'Parameter_Error: %s requires positive numbers for second and third parameters\n' "${FUNCNAME[0]}" >&2
return 1
fi
local _loop_count='0'
local -a _ipv4_addresses
while true; do
for _address in $({ ip addr show ${_interface} | awk '/inet /{print $2}'; } 2>/dev/null); do
_ipv4_addresses+=("${_address}")
done
if [ "${#_ipv4_addresses[@]}" -gt '0' ]; then
printf '%s\n' "${_ipv4_addresses[*]}"
break
elif [ "${_loop_count}" -gt "${_loop_limit}" ]; then
break
fi
let _loop_count+=1
sleep "${_sleep_interval}"
done
[[ "${#_ipv4_addresses[@]}" -gt '0' ]]; return "${?}"
}
GitHub bash-utilities/await-ipv4-address, ReadMe Git .
...
source "await-ipv4-address.sh"
... ...
#!/usr/bin/env bash
__SOURCE__="${BASH_SOURCE[0]}"
while [[ -h "${__SOURCE__}" ]]; do
__SOURCE__="$(find "${__SOURCE__}" -type l -ls | sed -n 's@^.* -> \(.*\)@\1@p')"
done
__DIR__="$(cd -P "$(dirname "${__SOURCE__}")" && pwd)"
source "${__DIR__}/modules/await-ipv4-address/await-ipv4-address.sh"
awk grep ? - Geofferey
; , echo , grep ... awk , , printf .
awk IPv4 IPv6 ....
for _address in $({ ip addr show ${_interface} | awk '/inet/{print $2}'; } 2>/dev/null); do
done
... , .
-,
- IP
eth0
_ip_addresses_list=($(await_ipv4_address 'eth0'))
- IP
tun0
_ip_addresses_list=($(await_ipv4_address 'tun0' '1' '29'))
- IP
wlan0 3
_ip_addresses_list=($(await_ipv4_address 'wlan0' '3' '19'))
, await_ipv4_address , , ...
_ip_addresses_list=($(await_ipv4_address 'wlan0' '3' '19' || true))
... , , - .
IP-...
for _ip_address in "${_ip_addresses_list[@]}"; do
printf 'IP -> %s\n' "${_ip_address}"
done
, , ? - user207421
, , , , - Geofferey
, IP- /AP ; , IP- ... , , .
, , dig curl, ping DNS , .
, - , , ? - Geofferey
... ...
await_ipv4_address(){
local _interface="${1:?
local _sleep_interval="${2:-1}"
local _loop_limit="${3:-10}"
}
local , help local help declare,
"${something:?Error message}" Error message something
"${another_thing:-1}" "${another_thing:-1}" 1 another_thing
, man --pager='less -p ^"PARAMETERS"' bash Special Parameters man --pager='less -p "Parameter Expansion"' bash , .
if [ "${_sleep_interval}" -lt '0' ] || [ "${_loop_limit}" -le '0' ]; then
printf 'Parameter_Error: %s requires positive numbers for second and third parameters\n' "${FUNCNAME[0]}" >&2
return 1
fi
, _sleep_interval _loop_count - -lt (-lt) (-le)
, if true, || , false , as && &&, true
man operator
while true; do
done
for _address in $({ ip addr show ${_interface} | awk '/inet /{print $2}'; } 2>/dev/null); do
_ipv4_addresses+=("${_address}")
done
if [ "${#_ipv4_addresses[@]}" -gt '0' ]; then
printf '%s\n' "${_ipv4_addresses[*]}"
break
elif [ "${_loop_count}" -gt "${_loop_limit}" ]; then
break
fi
break while , .
let _loop_count+=1
sleep "${_sleep_interval}"
[[ "${#_ipv4_addresses[@]}" -gt '0' ]]; return "${?}"
- A semicolon with check brackets (
[[ is_it_true ]]) instead of ||or &&calls returnto return the status if the number of IP addresses found is greater, 0regardless of the reliability of the test
If after all this there is something dubious, do not hesitate to leave comments to improve the answer.