Linux、改进的 cal、shell 编程
我正在与加州大学一起完成一项家庭作业,但我被困在一个问题上。
不太可能有人真正对获得公历感兴趣 一世纪的一年的日历,当时公历 日历甚至不存在。使用“窗口”策略让您 新的 cal 可以处理非完整 4 位数年份的年份。如果 年的范围为 0 <= 年 <= 50,假设该年确实是 2000-2050。如果年份在 51 <= Year <= 99 范围内,则假设 年份实际上是 1951-1999 年。
文件名为改进的cal.sh 例如,使用 sh Improvedcal.sh 1 2011 调用 shell 代码
case $# in
# rando stuff
*) m=$1; y=$2 ; # 2 ags: month and year
if ((y >= 0 && y <= 50)); then
y+=2000
elif ((y >= 51 && y <= 99)); then
y+=1900
fi;;
esac
case $m in
jan*|Jan*) m=1 ;;
feb*|Feb*) m=2 ;;
mar*|Mar*) m=3 ;;
apr*|Apr*) m=4 ;;
may*|May*) m=5 ;;
jun*|Jun*) m=6 ;;
jul*|Jul*) m=7 ;;
aug*|Aug*) m=8 ;;
sep*|Sep*) m=9 ;;
oct*|Oct*) m=10 ;;
nov*|Nov*) m=11 ;;
dec*|Dec*) m=12 ;;
[1-9]|10|11|12) ;; # numeric month
0[1-9]|010|011|012) ;; # numeric month
# *) y=$m; m="" ;; # plain year
esac
/usr/bin/cal $m $y # run cal with new inputs
但这由于某种原因不起作用,有人对我有任何指示吗? 由于某种原因,它只是跳过了这一部分。
I am working with cal for a homework assignment and i am stuck on one point.
It is unlikely that anyone is really interested in getting a gregorian
calendar for a year in the first century, a time when the gregorian
calendar didn't even exist. Use the "windowing" strategy to allow your
new cal to handle years that are not the full 4 digit year. If the
year is in the range of 0 <= year <= 50, assume the year is really
2000-2050. If the year is in the range 51 <= year <= 99, assume the
year is really 1951-1999.
file named improvedcal.sh
call the shell with sh improvedcal.sh 1 2011 for example
code
case $# in
# rando stuff
*) m=$1; y=$2 ; # 2 ags: month and year
if ((y >= 0 && y <= 50)); then
y+=2000
elif ((y >= 51 && y <= 99)); then
y+=1900
fi;;
esac
case $m in
jan*|Jan*) m=1 ;;
feb*|Feb*) m=2 ;;
mar*|Mar*) m=3 ;;
apr*|Apr*) m=4 ;;
may*|May*) m=5 ;;
jun*|Jun*) m=6 ;;
jul*|Jul*) m=7 ;;
aug*|Aug*) m=8 ;;
sep*|Sep*) m=9 ;;
oct*|Oct*) m=10 ;;
nov*|Nov*) m=11 ;;
dec*|Dec*) m=12 ;;
[1-9]|10|11|12) ;; # numeric month
0[1-9]|010|011|012) ;; # numeric month
# *) y=$m; m="" ;; # plain year
esac
/usr/bin/cal $m $y # run cal with new inputs
But this is not working for some reason does anyone have any pointers for me?
It just skips right over this part for some reason.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您不声明变量并直接为其赋值,那么它要么是字符串 (
var=stuff
),要么是数组 (var=(element0 element1 element2)
) 。由于y
是一个字符串,因此y+=2000
将字符串2000
附加到该值。您可以将
y
声明为整型变量,然后+=
运算符将执行加法。另一种方法是在算术表达式中使用
+=
运算符:或者您可以执行算术运算并分配结果:
您可以使用
? 在单个算术表达式中编写所有这些操作? … :
条件运算符:If you don't declare a variable and directly assign to it, then it's either a string (
var=stuff
) or an array (var=(element0 element1 element2)
). Sincey
is a string,y+=2000
appends the string2000
to the value.You can declare
y
as an integer variable, then the+=
operator will perform an addition.Another way is to use the
+=
operator inside an arithmetic expression:Or you can perform the arithmetic operation and assign the result:
You can write all of this in a single arithmetic expression using the
? … :
conditional operator:尝试使用 bash -xv 运行脚本,它将帮助您了解发生了什么。
另请阅读 Bash 编程简介
Try running your script with
bash -xv
, it will help you understand what is happening.Read also Bash programming intro