2

.bash_profileユーザーがシステムにログインしたときに実行するコマンドを配置できます。特定の時間帯のログインを禁止したい。アルゴリズム:

if((HOUR(now) == 13) || (HOUR(now) < 7))
    exit

私は、Cでこのようなことをする方法を知っています:

#include <stdio.h>
#include <time.h>

int main(int argc, char *argv[])
{
    time_t rawtime; time (&rawtime);
    struct tm *tm_struct = localtime(&rawtime);

    int hour = tm_struct->tm_hour;

    if((hour == 13) || (hour < 7))
    {
        printf("hi\n");//exit will be used instead
    }

    return 0;
}

しかし、bashでそれを実装する方法がわかりません。

4

3 に答える 3

6

注意が必要date +%Hです -- それが "08" または "09" を返し、それを算術式で使用しようとすると、無効な 8 進エラーが発生します。

$ hour="09"
$ if (( hour == 13 || hour < 7 )); then echo y; else echo n; fi
bash: ((: 09: value too great for base (error token is "09")
n

数値が 10 進数であることを明示的に bash に伝えることができます。

$ if (( 10#$hour == 13 || 10#$hour < 7 )); then echo y; else echo n; fi
n

または、別の日付形式指定子を使用します。私の日付のマニュアルページには%k%_Hスペースが埋め込まれた時間 (0..23) が返されます。

hour=$(date +%_H)
if (( hour == 13 || hour < 7 )); then ...
于 2013-09-18T19:41:05.027 に答える
3
#!/bin/bash
HOUR=`date +%H`
if [ $HOUR -eq 13 -o $HOUR -lt 7 ];then
    exit
fi

とは異なり()、は8 進数として[]解釈されないことに注意してください。09

于 2013-09-18T18:43:22.933 に答える
2

date次のコマンドを使用して、時間だけを返します。

hour=$(date +%H)
if (( hour == 13 || hour < 7 )); then
    exit
fi
于 2013-09-18T18:42:27.010 に答える