运行脚本以查找磁盘空间时出错

时间:2014-08-11 07:57:19

标签: linux bash shell awk sh

我在脚本下面运行: -

#!/bin/bash
threshold="20"
i=2
result=`df -kh |grep -v “Filesystem” | awk ‘{ print $5 }’ | sed ‘s/%//g’`
for percent in $result; do
    if ((percent > threshold))
    then
        partition=`df -kh | head -$i | tail -1| awk ‘{print $1}’`
        echo “$partition at $(hostname -f) is ${percent}% full”
    fi
    let i=$i+1
done

但是我收到以下错误:

awk: ‘{
awk: ^ invalid char '▒' in expression
sed: -e expression #1, char 1: unknown command: `▒'

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:3)

awk不起作用? (你的脚本在我的Ubuntu上运行正常)

这一行:

result=`df -kh |grep -v "Filesystem" | awk '{ print $5 }' | sed 's/%//g'`

可以更改为:

result=$(df -kh | awk '!/Filesystem/ {print $5+0}')

如果括号的工作原理如下:var=$(code...)

,请避免使用旧的和过时的背景

此:

partition=`df -kh | head -$i | tail -1| awk '{print $1}'`

可以更改为:

partition=$(df -kh | awk -v line="$i" 'NR==line {print $1}')

这个

let i=$i+1

可以改为:

((i++))

这会给出一些这样的:

#!/bin/bash
threshold="20"
i=2
result=$(df -kh | awk '!/Filesystem/ {print $5+0}')
for percent in $result; do
    if ((percent > threshold))
    then
        partition=$(df -kh | awk -v line="$i" 'NR==line {print $1}')
        echo "$partition at $(hostname -f) is ${percent}% full"
    fi
((i++))
done

答案 1 :(得分:1)

您使用表示单引号而非'。尝试使用编辑器重新编码文件。

答案 2 :(得分:1)

您得到了语法错误的答案,现在重新编写整个脚本:

#!/bin/bash
df -kh |
awk -v t=20 -v h="$(hostname -f)" '(NR>1)&&($5+0>t){printf "%s at %s is %s full\n",$1,h,$5}'