意外令牌附近的语法错误`('在shell脚本中

时间:2016-03-29 08:31:27

标签: shell syntax-error

这是我的剧本。

#!/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个知识

2 个答案:

答案 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命令的输出,而不是分叉许多子进程。