gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:43:21 24 4
gpt4 key购买 nike

我想编写一个脚本来读取这个文件:包含用户名的 active_users:email@email.com 然后搜索每个用户的磁盘使用情况,如果磁盘使用情况大于限制 1)向用户发送电子邮件 2)将用户名和这些文件保存到文件中 -> users_over_quota。我的问题是即使我在 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

最佳答案

这是您提供的代码的替代版本。它将跳过 $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"

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

另请注意,我在处理的顶部“清零”了 overQuota 文件

 echo "USERNAME:$name" > $name.files_over_quota

否则,overQuota 文件会一直变大。

在循环处理中,

请注意,在这种情况下填充 $name 要容易得多和 $email通过使用 IFS=:"告诉read根据 : 将输入行拆分为多个字段.

而且你可以用短的 case 来捕获一个空行陈述。外壳将转换 ${name:- emptyLine} to just the string空行 if there is no value found in $名字`。

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

因为 http://shellcheck.net,我用双引号将代码中的大部分变量括起来了提醒了我这一点。 :-)我没有简单的方法来测试它,所以如果您遇到错误,请告诉我。

健康教育

关于Linux 脚本读取文件并删除 EOF 最后一个空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34098415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com