我正在嘗試編寫一個腳本,在這個腳本中,我將一個shell變量傳遞給一個awk命令,但是當我運行它時什麼也沒有發生,我試圖只運行那一行在shell中,我發現沒有像我期望的那樣發生可變擴展。下面的代碼:如何在awk命令中插入shell變量
1 #!/bin/bash
2
3 # Created By Rafael Adel
4
5 # This script is to start dwm with customizations needed
6
7
8 while true;do
9 datestr=`date +"%r %d/%m/%Y"`
10 batterystr=`acpi | grep -oP "([a-zA-Z]*), ([0-9]*)%"`
11 batterystate=`echo $batterystr | grep -oP "[a-zA-Z]*"`
12 batterypercent=`echo $batterystr | grep -oP "[0-9]*"`
13
14 for nic in `ls /sys/class/net`
15 do
16 if [ -e "/sys/class/net/${nic}/operstate" ]
17 then
18 NicUp=`cat /sys/class/net/${nic}/operstate`
19 if [ "$NicUp" == "up" ]
20 then
21 netstr=`ifstat | awk -v interface=${nic} '$1 ~ /interface/ {printf("D: %2.1fKiB, U: %2.1fKiB",$6/1000, $8/1000)}'`
22 break
23 fi
24 fi
25 done
26
27
28 finalstr="$netstr | $batterystr | $datestr"
29
30 xsetroot -name "$finalstr"
31 sleep 1
32 done &
33
34 xbindkeys -f /etc/xbindkeysrc
35
36 numlockx on
37
38 exec dwm
這條線:
netstr=`ifstat | awk -v interface=${nic} '$1 ~ /interface/ {printf("D: %2.1fKiB, U: %2.1fKiB",$6/1000, $8/1000)}'`
是什麼原因導致netstr
變量未達到所有分配。那是因爲interface
不是我換成${nic}
。
那麼你能告訴我這裏有什麼問題嗎?謝謝。
嗯,但到底是什麼'/ /'怎麼辦? –
//意思是grep從輸入(又名匹配) –
確切地說,//在awk中意味着只處理與它們之間包含的模式匹配的行,如條件,即只有符合表達式的行被認爲是有效的才能被處理通過awk程序。老實說,現在我不記得了,如果awk變量可以用作模式(或者如果是這樣的話),而且我碰巧太累了不能玩它,但是你可以試試$(...)而不是' ',或者表達式封閉的技巧(你可以使用任何字符來代替//定義表達式的開始和結束,比如%..%或者其他任何方法。最後一種方法是用awk程序單獨使用外部文件。 –