Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以基于星期几使用Bash IF ELSE语句吗_Bash_Date_If Statement - Fatal编程技术网

我可以基于星期几使用Bash IF ELSE语句吗

我可以基于星期几使用Bash IF ELSE语句吗,bash,date,if-statement,Bash,Date,If Statement,我正在编写一个脚本,我有4个单独的Curl命令,需要根据每月的星期运行 即如果第一周跑步,则进行第一次卷发 如果第2周进行第2次卷发 等 只有4个,它们只需要在本月的前4周运行,第5周无关紧要 有什么想法吗?使用date获取月份的日期,然后根据该日期进行处理 day=$(date +%-d) if [[ $day -le 7 ]] then action1 elif [[ $day -le 14 ]] then action2 elif [[ $day -le 21 ]] then

我正在编写一个脚本,我有4个单独的Curl命令,需要根据每月的星期运行

即如果第一周跑步,则进行第一次卷发 如果第2周进行第2次卷发

只有4个,它们只需要在本月的前4周运行,第5周无关紧要


有什么想法吗?

使用
date
获取月份的日期,然后根据该日期进行处理

day=$(date +%-d)
if [[ $day -le 7 ]]
then
   action1
elif [[ $day -le 14 ]]
then
   action2
elif [[ $day -le 21 ]] 
then
   action3
elif [[ $day -le 28 ]]
then
   action4
fi

week1
<代码>工作周5是在不同的周内具有不同操作的功能

date
获取日数,不填充零(填充零被解释为八进制)
date+%-d
提供一个月中的某一天,不填充零

day=$(date +%-d)
let "week=(day-1)/7+1"
case $week in
1) week1;;
2) week2;;
3) week3;;
4) week4;;
5) week5;;
esac
如果。。。埃利夫

if [[ $week -eq 1 ]]
then
   week1
elif [[ $week -eq 2 ]]
then
   week2
elif [[ $week -eq 3 ]]
then
   week3
elif [[ $week -eq 4 ]]
then
   week4
elif [[ $week -eq 5 ]]
then
   week5
fi

有很多解决方案,这里有一个更深奥的解决方案:

为每周的操作创建一个函数week1..week5,并为无效周创建一个函数weeki

actions=(weeki week1 week2 week3 week4 week5)    # an array of function names
day=$(date +%-d)                                  # get the day of the month
index=$(( (day/7) + 1 ))                         # get the week number

eval ${actions[$index]}                          # execute the function

你对一周的定义是什么?是一周的前7天,还是从第一个星期天或星期一开始的一周?我可以灵活变通。前7天很好,我运行这个时出错了。第4行:[[:08:值太大(错误标记为“08”)这是为所有日期行返回的。填充为零的成员被解释为八进制
“week=(i-1)/7+1”
您的意思是
“week=(day-1)/7+1”
?有趣的是,我首先使用+%d编写了我的解决方案,即当天使用前导零。在Korn shell中运行良好,但在Bash中正如您所预测的那样失败。即使没有数组,它也可以运行,只需使用
eval week${index}更改最后一行即可