大家好,
我已经创建了一个小的bash shell脚本,我想在GeekTool上使用它,但在我的iMac (11,1)和我的MacBook专业版(8,3)上使用相同的脚本时,我体验到了不同的结果。我正在使用networksetup和system_profiler拉取网络数据。到目前为止,我对这两者都有几次调用,但希望将其合并为对每个创建变量的进程的一次调用,以便在我的脚本中使用。到目前为止,我的脚本如下:
# Get Ethernet and Wi-Fi information and display it for GeekTool
WiFi=$(networksetup -getairportnetwork en1 | awk '{print $4 " " $5 " " $6 " " $7 " " $8}')
WiFi_IP=$(networksetup -getinfo Wi-Fi | grep -v IPv6 | awk '/IP address/ {print $3}')
SubMask=$(networksetup -getinfo Wi-Fi | awk '/Subnet mask/ {print $3}')
S2N=$(system_profiler SPAirPortDataType | awk '/Noise/ {print $4 " " $5 " " $6 " " $7 " " $8}')
TRate=$(system_profiler SPAirPortDataType | awk '/Rate/ {print $3 " Mbps"}')
echo -e "\033[4;33m" AirPort
if [ "$WiFi_IP" = "" ];
then echo "Not connected to wireless AP."
else echo -e "Wi-Fi AP: " $WiFi "\nIP Address: " $WiFi_IP "\nSubnet Mask: " $SubMask "\nTransmit Rate: " $TRate
fi
EthIP=$(networksetup -getinfo Ethernet | grep -v IPv6 | awk '/IP address/ {print $3}')
EthSubMask=$(networksetup -getinfo Ethernet | grep -v IPv6 | awk '/Subnet mask/ {print $3}')
echo -e "\033[4;33m" "\nEthernet"
if [ "$EthIP" = "" ];
then echo "Not connected to wired network."
else echo -e "IP Address: " $EthIP "\nSubnet Mask: " $EthSubMask
fi当我在GeekTool中创建一个外壳并输入脚本的路径时,在我的MacBook专业版上一切正常,但在我的iMac上,GeekTool只显示一次结果,然后在刷新时(我将其设置为15s),结果就消失了,再也不会回到屏幕上了。虽然我知道我拥有的东西是有效的,但它对两个进程进行了太多的调用,我想将它合并到每个进程的一个调用中,将所需的信息提取到一个容器中,例如我可以从其中访问所述所需信息的数组。
换句话说,有没有人知道我如何只需调用networksetup一次,就能从-getairportnetwork en1和-getinfo Wi-Fi以及system_profiler SPAirPortDataType (每次耗时最长--大约5-8秒)获取所有收集的信息?
发布于 2011-07-28 09:56:20
我稍微修改了一下我的极客工具脚本,省略了信噪比这件事。新的AirportStatus.sh文件如下所示:
#! /bin/bash
# echo -e "\033[0;30m" echo in black
# echo -e "\033[0;31m" echo in red
# echo -e "\033[0;32m" echo in green
# echo -e "\033[0;33m" echo in yellow
# echo -e "\033[0;34m" echo in blue
# echo -e "\033[0;35m" echo in magenta
# echo -e "\033[0;36m" echo in cyan
# echo -e "\033[0;37m" echo in white
# echo -e "\033[4;37m" echo in white underlined
echo -e "\033[4;33m" "Airport"
# Get Airport status from OS X
Status=$(ifconfig en1 | awk '/status/ {print $2}')
if [ "$Status" = "inactive" ];
then echo -e "\033[0;31m" "Status: " $Status "\nNot connected to wireless AP."
else echo -e "\033[0;32m" "Status" $Status
# Get wireless stats from OS X
WiFi=$(networksetup -getairportnetwork en1 | awk '{print $4 " " $5 " " $6 " " $7 " " $8}')
WiFi_IP=$(networksetup -getinfo Wi-Fi | grep -v IPv6 | awk '/IP address/ {print $3}')
SubMask=$(networksetup -getinfo Wi-Fi | awk '/Subnet mask/ {print $3}')
TRate=$(system_profiler SPAirPortDataType | awk '/Transmit/' | sed 's/[^0-9]//g')
# Get bytes in/out
# get the current number of bytes in and bytes out
myvar1=$(netstat -ib | grep -e en1 -m 1 | awk '{print $7}') # bytes in
myvar3=$(netstat -ib | grep -e en1 -m 1 | awk '{print $10}') # bytes out
#wait one second
sleep 1
# get the number of bytes in and out one second later
myvar2=$(netstat -ib | grep -e en1 -m 1 | awk '{print $7}') # bytes in again
myvar4=$(netstat -ib | grep -e en1 -m 1 | awk '{print $10}') # bytes out again
# find the difference between bytes in and out during that one second
subin=$(($myvar2 - $myvar1))
subout=$(($myvar4 - $myvar3))
# convert bytes to megabytes
mbin=$(echo "scale=2 ; $subin/1048576;" | bc)
mbout=$(echo "scale=2 ; $subout/1048576 ; " | bc)
usedMB=$(echo "scale=2 ; $mbin+$mbout ; " | bc)
AvailBW=$(echo "scale=2 ; $TRate-$usedMB ; " | bc)
echo -e "\033[0;37m" "Wi-Fi AP: " "\033[0;36m" $WiFi "\033[0;37m" "\nIP Address: " "\033[0;36m" $WiFi_IP $3 "\033[0;37m" "\nSubnet Mask: " "\033[0;36m" $SubMask "\033[0;37m" "\nTransmit Rate: " "\033[0;36m" $TRate " Mbps\n" "\033[0;37m" "Data In: " "\033[0;36m" $mbin "Mbps" "\n" "\033[0;37m" "Data Out: " "\033[0;36m" $mbout "Mbps\n" "\033[0;37m" "Available Bandwidth: " "\033[0;36m" $AvailBW " Mbps"
fi我检查了是否处于活动状态,假设它最初处于非活动状态。如果不是,那么我放入大量的If语句,其中所有变量都被初始化并完成计算。只有一个对system_profiler的调用,就是检索传输速率的调用,但是我想知道我的无线网络的“线速”。这样做的效果并不像我希望的那样好,但它仍然是一个很好的练习,让你了解了在Mac上哪里可以获取信息,以及如何使用awk和see。我仍然有很多东西要学,但到目前为止,这是令人兴奋的。
https://stackoverflow.com/questions/6727629
复制相似问题