Linux脚本从文件中读取并删除EOF的最后一个空白行

时间:2015-12-04 22:17:04

标签: linux

我想创建一个脚本来读取此文件: active_users包含用户名:email@email.com,然后搜索每个用户的磁盘使用情况,如果磁盘使用量大于限制1)向用户发送电子邮件2)将用户名和这些文件保存到文件 - > users_over_quota.My问题即使我在active_users中只有一个用户我的输出文件 - > files_over_quota重复记录。我认为它需要空白的eof行。我怎么能阻止它?。这就是我到目前为止所做的:

#!/bin/bash
filename='active_users'
while read -r line; do
        name=$(echo $line | awk -F ":" '{print $1}')
        email=$(echo $line | awk -F ":" '{print $2}')
    mailto=$email
    subject="/home/$name disk usage"
    echo "USERNAME:$name" >>files_over_quota
        find /home/$name -type f -size +500M -exec basename {} \;  >> files_over_quota

    #grep -v '^$' active_users >>files_over_quota
    #mail -s "$subject" $email < /dev/null
    echo "Username and files over limit were saved !"
done <$filename

1 个答案:

答案 0 :(得分:1)

这是您提供的代码的替代版本。它将跳过$filename中的空白行。

#!/bin/bash
filename='active_users'
while IFS=":" read -r name email ; do
   case ${name:-emptyLine} in
       emptyLine ) continue ;;
   esac
   mailto="$email"
   subject="/home/$name disk usage"
   echo "USERNAME:$name" > "$name".files_over_quota
   find /home/"$name" -type f -size +500M -exec basename {} \;  >> files_over_quota

    #grep -v '^$' active_users >>  "$name".files_over_quota
    mail -s "$subject" $email < "$name".files_over_quota

    echo "Username and files over limit were saved !"
done <"$filename"

它还为每个用户保留单独的文件,因此当您发送电子邮件时,不会为所有用户输出。

另请注意,我已经&#34;归零&#34;使用

处理顶部的overQuota文件
 echo "USERNAME:$name" > $name.files_over_quota

否则,overQuota文件将永远变大。

在循环处理中,

请注意,在这种情况下,使用$name告诉$email将输入行拆分为基于字段的字段,可以更轻松地填充IFS=:"read :

并且您可以使用短case语句捕获空行。 shell将转换${name:- emptyLine} to just the string emptyLine if there is no value found in $ name`。

我没有看到你使用mailto,所以也许你可以删除它。

我已使用dbl-quotes在代码中附加了大多数变量,因为http://shellcheck.net提醒了我这一点。 :-) 我没有简单的方法来测试这个,所以如果你遇到错误,请告诉我。

IHTH