我必须创建一个脚本,在运行时,会放一个名为"生日快乐的空文件!"在用户生日的主目录中。用户的生日存储在名为" birthdays.data"的文件中,每行一个条目,其中每行为:用户名月份日。
例如:
爱丽丝11月3日 bob 10月10日
我有一个算法,但我不知道如何实现它或它是否正确。我的算法是这样的
today=$(date)
while not end of file birthdays.data
do
read from file NAME DATE
if today=DATE then
cd home
touch "Happy Birthday!!!"
fi
done
知道我的算法是否正确或如何在代码中实现它?因为我对shell脚本语法有点新意。
答案 0 :(得分:1)
格式化今天的日期以匹配输入文件中的格式:
hash160
另一个重要的观点是获得用户的主路径。如果所有用户住宅一直在today=$(date '+%b %e')
,那么这可以简单到:
/home
否则,这是另一种方式:
userdir="/home/$username"
其余的是正确的Bash语法:
userdir=$(sudo -u "$user" bash -c 'echo $HOME')
答案 1 :(得分:0)
如果输入文件的格式与显示的相同,则可以使用GNU awk
和parallel
awk -v m=$(date +%b) -v d=$(date +%d) 'm==$2&&d==$3{print $1}' birthdays.data |\
parallel --dry-run touch /home/{}/Happy\ Birthday\!\!\!
删除--dry-run
以实际创建文件,您可能还希望通过在sudo
前添加touch
来提升您的权限,以便在其他用户的主目录中创建文件< / p>
<强>释强>
-v m=$(date +%b)
和-v d=$(date +%d)
将今天的月和日值传递给awk m==$2&&d==$3{print $1}
打印出用户名,如果该行包含与今天相同的日期