2016-03-29 23 views
1

Bu benim senaryom. Bensözdizimi hatası `(' kabuk komut

./memory_shell.sh: line 15: syntax error near unexpected token `(' 
./memory_shell.sh: line 15: `declare -i MEM_UTIL=($MEM_TOTAL-($MEM_FREE+$MEM_BUFFER+$MEM_CACHE))' 

bunu nasıl düzeltebilirim. Ben 0 bilgisine sahip gibi sözdizimi hataları var

#!/bin/bash 
MONITOR=$(free -m| grep Mem) 
MEM_TOTAL=$(echo $MONITOR | awk '{ print $2 }') 
MEM_USED=$(echo $MONITOR | awk '{ print $3 }') 
MEM_FREE=$(echo $MONITOR | awk '{ print $4 }') 
MEM_CACHE=$(echo $MONITOR | awk '{ print $5 }') 
MEM_BUFFER=$(echo $MONITOR | awk '{ print $6 }') 
declare -i MEM_UTIL=($MEM_TOTAL-($MEM_FREE+$MEM_BUFFER+$MEM_CACHE)) 
echo "$MEM_UTIL" 

kabuk komut dosyası

o bir argüman alır gibi sadece declare -i için argüman tırnak koymak gerekir
+2

http://www.shellcheck.net/ arkadaşın – jDo

cevap

1

.

declare -i MEM_UTIL="($MEM_TOTAL-($MEM_FREE+$MEM_BUFFER+$MEM_CACHE))" 

Yine de awk kullanırken, tam olarak kullanabilirsiniz. Aşağıdaki awk aynı işlemi yapar:

#!/bin/sh 
free -m | awk '/Mem/ {print($2 - ($4 + $5 + $6));}' 

Awk Eğer grep ile yapıyoruz sizin için satırla aynı ve eşleşen kayıttaki alanların üzerinde işlem yapabilir. Bu yüzden birtakım alt işlemlerden vazgeçmek yerine, özgür komutun çıktısını işlemek için birini çatallayabilirsiniz.

+0

Nasıl arabellek ve önbellek alabilirim? MEM_BUFFER = $ (echo $ MONITOR | awk '{print $ 6}') 'tampon/önbellek olarak geliyor. Ayrı ayrı düşünemiyorum. Aslında bu betik MEM_CACHE = $ (echo $ MONITOR | awk '{print $ 5}') 'paylaşımlı bellek – pico

+0

Parçanıza ayrılan daha fazla parçaya ihtiyacınız varsa, awk komut dosyasından birden fazla değer döndürmeniz ve" read "kabuğunu kullanmanız gerekir exisiting komut dosyasına devam edin veya devam edin, ancak ifadeyi tek bir argüman olarak gruplandırmak için alıntılar kullanın. Belli ki sadece senaryonun bir kısmını yayınladın, böylece sadece hangi parçaların gerektiğini bilirsin. – patthoyts