脚本在shell中的birthdate上创建一个空文件

时间:2017-11-09 03:13:59

标签: shell unix sh

我必须创建一个脚本,在运行时,会放一个名为"生日快乐的空文件!"在用户生日的主目录中。用户的生日存储在名为" 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脚本语法有点新意。

2 个答案:

答案 0 :(得分:1)

格式化今天的日期以匹配输入文件中的格式:

hash160

另一个重要的观点是获得用户的主路径。如果所有用户住宅一直在today=$(date '+%b %e') ,那么这可以简单到:

/home

否则,这是另一种方式:

userdir="/home/$username"

其余的是正确的Bash语法:

userdir=$(sudo -u "$user" bash -c 'echo $HOME')

答案 1 :(得分:0)

如果输入文件的格式与显示的相同,则可以使用GNU awkparallel

来完成
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}打印出用户名,如果该行包含与今天相同的日期