次のリンクには、システム情報を取得するスクリプトがあります。
具体的には、
network() {
read lo int1 int2 <<< `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`
if iwconfig $int1 >/dev/null 2>&1; then
wifi=$int1
eth0=$int2
else
wifi=$int2
eth0=$int1
fi
ip link show $eth0 | grep 'state UP' >/dev/null && int=$eth0 ||int=$wifi
#int=eth0
ping -c 1 8.8.8.8 >/dev/null 2>&1 &&
echo "$int connected" || echo "$int disconnected"
}
ただ実行すると:
ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'
(予想どおり) インターフェイスのリストを取得します。
しかし、私が実行すると
read lo int1 int2 <<< `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`
私は何も得られませんでした。$lo
、$int1
、 、 を確認してみると$int2
まだ何もありませんでした。読みが期待どおりに進まないようです。
この問題を解決するための提案がある人はいますか?私はそれをデバッグする方法を実際に知るのに十分な読み方を知りません。
ベストアンサー1
for
配列と一緒に-loopを試してみてくださいread
。
for link in `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`
do
int[${#int[*]}]=$link
done
したがって、シェルが配列をサポートしていない場合は、次のようになります${int[1]}
。${int[2]}
i=0
for link in `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`
do
eval int$i=$link
let i+=1
done