我可以基于星期几使用Bash IF ELSE语句吗
我正在编写一个脚本,我有4个单独的Curl命令,需要根据每月的星期运行 即如果第一周跑步,则进行第一次卷发 如果第2周进行第2次卷发 等 只有4个,它们只需要在本月的前4周运行,第5周无关紧要我可以基于星期几使用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
有什么想法吗?使用
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}更改最后一行即可