基于年份在脚本中执行命令

时间:2014-03-06 07:52:16

标签: macos bash shell datetime scripting

我有一台带有死机笔记本电池的Powerbook ......每次我断开它的电源时,日期都会回到1969年。这会导致网络身份验证,钥匙串访问等问题。我写了一个启动执行此脚本的守护程序,以便在启动时将日期设置为更合适的位置,这非常有效。

  #!/bin/bash

  date 0101122014

现在我只希望它只在年份是1969年才能运行,这样如果时间正确,它将不会被取消。

就像......

  #!/bin/bash

  YEAR="date +%Y"

  if [ $YEAR = 1969 ] ;
  then date  010112002014 
  else exit 0
  fi

我知道语法是完全关闭的,只是想知道我想做什么。在此先感谢您的帮助。

5 个答案:

答案 0 :(得分:3)

执行此命令设置日期:

sudo ntpdate -u time.apple.com

ntpdate将在指定的时间服务器中查询当前日期/时间,然后更新当地时间。

注意:脚本中的错误为YEAR="date +%Y":只是将字符串date +%Y分配给YEAR。但是你想执行date +%Y并分配结果:

YEAR=$(date +%Y)

相关:

答案 1 :(得分:2)

另一种方法

#!/bin/bash

monfile="/tmp/.com.example.touchfile"

#if have OK (current) date set the file modification time
have_current_date() {
        date > "$monfile"
}

#set the date from the last file modification time
have_wrong_date() {
        [ -f "$monfile" ] || touch -t 201401010101 "$monfile"
        eval $(stat -s "$monfile")   #get the file modification time to shell variable
        date -f '%s' $st_mtime   #set the date to "last" file modification time
}

#main program
YEAR=$(date +%Y)
case "$YEAR" in
        2014) have_current_date ;;      
        *) have_wrong_date ;;
esac

正在做什么

  • 获取实际系统日期
  • 如果年份是2014年 - 触摸$monfile - 将文件修改时间设置为当前时间
  • 如果年份不是2014年,则获取“最后”文件修改时间并从中设置系统日期

答案 2 :(得分:1)

使用command substitution

YEAR=$(date +%Y)

甚至:

[ $(date +%Y) = 1969 ] && date 010112002014

或者,使用if

if [ $(date +%Y) = 1969 ]
then date 010112002014
fi

答案 3 :(得分:1)

使用if的简单:

if [ $(date +%Y) = 1969 ]
then date 010112002014
else exit 0
fi

答案 4 :(得分:0)

所以我得到了你的帮助和帮助的所有设置它很棒。我使用了一个脚本和一个启动守护进程来设置,保存&通过ntp设定时间。在这里他们是:)有一百万种皮肤猫的方法这就是我剥皮的方法。

继承剧本:

#!/bin/bash


#Load variables from .conf file 

. /usr/share/fixes/time/time.conf


#Variables

DATE=$(date +%m%d%H%M%Y)


#Check year & set time from variable in .conf file

[ $(date +%Y) = 1969 ] && date $TIME


#Update time via ntp server

ntpdate -u $(systemsetup -getnetworktimeserver|awk '{print $4}')


#Save time to variable in .conf file 

sed -i -e "s/^TIME=.*/TIME=$DATE/" /usr/share/fixes/time/time.conf


exit 0

&安培;为OSX启动守护进程.plist,每3分钟运行一次脚本:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.fix.settime</string>
    <key>ProgramArguments</key>
    <array>
        <string>./usr/share/fixes/time/time-fix.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>180</integer>
</dict>

感谢所有帮助过的人,我真的很感激,感觉我再一次从大家那里学到了一些东西。