我對 Bash 腳本編寫相對較新,但對 Python 和許多 Bash 命令非常熟悉。我想知道是否可以使用諸如 之類的命令ifconfig eno1
,並將輸出用作if
語句中使用的條件。基本上,如果您發出:
ifconfig eno1
if
並且您獲得了活動 IP,是否有任何方法可以將其輸出保存為變數作為 1/0 或 true/false,以在以下語句範例中使用(假設ifoutput
是變數名稱):
if [ "$ifoutput" == "$True"]
then
echo connection is active!
fi
我想到可能會呼叫基本上做同樣事情的 Python 腳本,但是我認為我會遇到同樣的問題;無法從 Python 腳本中取得要在if
語句中使用的單獨傳回值。請給我建議,請對我寬容一點——正如我所說,我對 Bash 腳本來說還比較陌生!我已經有了嚴格使用 Python 執行此操作的方法,但是我正在嘗試了解有關 Bash 腳本的更多資訊。先致謝!
答案1
ifconfig
完成時將傳回一個 8 位數值(就像任何乾淨退出的 *nix 進程一樣)。
通常使用零 ( 0
) 表示成功,使用另一個值表示失敗。此回傳代碼可作為$?
.
ifconfig
也會輸出到stdout
,例如:
eth0 Link encap:Ethernet HWaddr 02:42:ac:14:00:02
inet addr:172.20.0.2 Bcast:172.20.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20430143 errors:0 dropped:0 overruns:0 frame:0
TX packets:20966475 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:46532669457 (46.5 GB) TX bytes:44114090048 (44.1 GB)
如果您嘗試確定是否ifconfig eth0
成功(即:權限取決於介面是否存在),那麼您可以執行以下操作之一:
ifconfig eth0
if [ $? -eq 0 ]; then
echo yay
fi
if ifconfig eth0; then
echo yay
fi
ifconfig eth0 && echo yay
Hidingifconfig
的輸出可以透過附加一個來實現> /dev/null
:
if ifconfig eth0 > /dev/null; then
echo yay
fi
您詢問有關列印回傳程式碼的問題,這對初學者來說是一個陷阱...
你可以簡單地這樣做:
ifconfig eth0
echo $?
但是在呼叫 on 之後echo
,回傳碼 ( $?
) 將是echo
的回傳碼,而不是ifconfig
...要處理這個問題,只需將其指派給一個臨時變數:
ifconfig eth0
RET=$?
echo ${RET}
if [ ${RET} -eq 0 ]; then
echo yay
fi
注意:[
是一個可以計算表達式的內建指令,方括號 ( [
/ ]
) 其實不是if
語法的一部分:
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
如果你真的想嘗試取得介面的IP位址,那麼您可能想要使用管道,例如以下之一(有很多方法可以實現相同的結果):
ifconfig eth0 | grep -Eom1 'inet addr:([0-9]{1,3}\.){3}[0-9]{1,3}' | cut -d: -f2
ifconfig eth0 | sed -re '/inet addr:/!d;s/^[^:]+://;s/ .*$//'