这是我的剧本。
#!/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"
我遇到了语法错误,例如
./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))'
我该如何解决?我在shell脚本方面有0个知识
答案 0 :(得分:2)
只是为了准确地记录我的问题这个错误消息。 原来我的脚本是DOS文本文件而不是Unix文本文件(作为恢复的结果)。 DOS2Unix修复脚本,他们运行良好,没有这个错误。 你的里程可能会有所不同......
答案 1 :(得分:1)
你需要在declare -i
的参数周围加上引号,因为它需要一个参数。
declare -i MEM_UTIL="($MEM_TOTAL-($MEM_FREE+$MEM_BUFFER+$MEM_CACHE))"
当你正在使用awk时,你也可以完全使用它。以下是在awk中执行相同的操作:
#!/bin/sh
free -m | awk '/Mem/ {print($2 - ($4 + $5 + $6));}'
当您使用grep执行时,Awk可以为您匹配该行,并对匹配记录中的字段执行操作。因此,您可以使用fork来处理free命令的输出,而不是分叉许多子进程。