Linux 用于显示特定日期的进程的shell脚本

Linux 用于显示特定日期的进程的shell脚本,linux,bash,terminal,Linux,Bash,Terminal,所以我一直在尝试编写一个shell脚本,显示特定日期的后台进程。问题是:日期是用户给定的参数。我读了日期并验证了它,但我不知道该使用什么命令。另外,我尝试使用ps命令,但没有成功。我也不知道我的日期格式是否合适。以下是我所做的: #!/bin/bash echo "Date dd-mm-yyyy" read date if [[ $date =~ ^[0-9]{2}-[0-9]{2}-[0-9]{4}$ ]] then echo "Date is valid" else echo "Date i

所以我一直在尝试编写一个shell脚本,显示特定日期的后台进程。问题是:日期是用户给定的参数。我读了日期并验证了它,但我不知道该使用什么命令。另外,我尝试使用ps命令,但没有成功。我也不知道我的日期格式是否合适。以下是我所做的:

#!/bin/bash
echo "Date dd-mm-yyyy"
read date
if [[ $date =~ ^[0-9]{2}-[0-9]{2}-[0-9]{4}$ ]]
then echo "Date is valid"
else echo "Date is not valid"
fi

非常感谢您的帮助。

如果我理解您的问题,您正在尝试验证shell脚本中的日期格式,因此您必须使用正则表达式检查输入格式,如下所示:

#! /bin/bash

isDateInvalid()
{
    DATE="${1}"

    # Autorized separator char ['space', '/', '.', '_', '-']
    SEPAR="([ \/._-])?"

    # Date format day[01..31], month[01,03,05,07,08,10,12], year[1900..2099]
    DATE_1="((([123][0]|[012][1-9])|3[1])${SEPAR}(0[13578]|1[02])${SEPAR}(19|20)[0-9][0-9])"

    # Date format day[01..30], month[04,06,09,11], year[1900..2099]
    DATE_2="(([123][0]|[012][1-9])${SEPAR}(0[469]|11)${SEPAR}(19|20)[0-9][0-9])"

    # Date format day[01..28], month[02], year[1900..2099]
    DATE_3="(([12][0]|[01][1-9]|2[1-8])${SEPAR}02${SEPAR}(19|20)[0-9][0-9])"

    # Date format day[29], month[02], year[1904..2096]
    DATE_4="(29${SEPAR}02${SEPAR}(19|20(0[48]|[2468][048]|[13579][26])))"

    # Match the date in the Regex

    if ! [[ "${DATE}" =~ "^(${DATE_1}|${DATE_2}|${DATE_3}|${DATE_4})$" ]]
    then
        echo -e "ERROR - '${DATE}' invalid!"
    else
        echo "${DATE} is valid"
    fi
}

echo
echo "Exp 1: "`isDateInvalid '12/13/3000'`
echo "Exp 2: "`isDateInvalid '12/11/2014'`
echo "Exp 3: "`isDateInvalid '12 01 2020'`
echo "Exp 4: "`isDateInvalid '28-02-2014'`
echo "Exp 5: "`isDateInvalid '12_02_2002'` 
echo "Exp 6: "`isDateInvalid '12.10.2099'`
echo "Exp 7: "`isDateInvalid '31/11/2001'`

如果我正确理解您的问题Q,则没有可用于按日期查询的流程信息源。可能有一个进程创建的日期,但您无法知道它使用了多少CPU或其他任何东西,除非是在当前时间。我认为您所说的是进程历史记录,在脚本编写中实现这一点的唯一方法是保存历史记录文件。也许在睡眠5分钟的时候;执行ps axuw>/path/to/process/hist/$date+%Y-%m-%d.%H:%m;“完成”将生成您需要的数据,但使用它将是一项真正的艰巨任务。。。。您的操作系统可能有附加软件包,可以根据您需要的详细信息进行系统日志记录,但可能需要进行研究、学习等。如果您试图跟踪一个对系统其余部分造成问题的有效流程,while循环可能是您获得任何结果的最快方法,但同样,这将是一个艰难的过程。你需要调整期望值。祝你好运。你的日期规范dd-mm-yyyy当然是有效的,但是大多数日志工具使用自然排序的yyy-mm-dd格式。如果你的如果[[$date…代码不起作用,这是你的Q的真正内容,然后使用set-x来查看哪些值被实际替换为你的变量。set+x关闭该功能。祝你好运。而且运行你的代码不会有任何伤害。请确保在提交代码时将!/bin/bash或任何你正在使用的shell作为代码的第一行呃,运气好吗?