MOD(%)不是标识符的Unix的ksh
问题描述:
我已经从C语言的Unix的ksh脚本转换后的一个功能和下面是代码MOD(%)不是标识符的Unix的ksh
function greg_julian
{
typeset -i long_date=$1;
print "$scriptname ld $long_date" 1>&2; # Prints 20160121
set days -9999 0 31 59 90 120 151 181 212 243 273 304 334;
if [[ $long_date < 101 ]] then
return 0;
fi
typeset -i yy=$long_date/10000;
typeset -i mm=$long_date/100 % 100;
ymod=$(($yy % 4))
if [[ $ymod -eq 0 && $mm -gt 2 && $yy -ne 0 ]] then
dm=1;
else
dm=0;
fi
echo $yy*1000 + ${days[$mm]} + $long_date % 100 + $dm;
}
我得到一个错误如下。尝试删除%周围的空间。但同样的错误。我无法找出错误,请帮助。
greg_julian[87]: %: is not an identifier
答
您可以使用一个中间变量:
#!/bin/ksh
long_date=20160121
typeset -i yy=$long_date/10000;
typeset -i yymm=$long_date/100;
typeset -i mm=$yymm%100;
printf "%04d\n" $yy
printf "%02d\n" $mm
+0
完美的作品!谢谢。不得不除去%左右的空间 – xGen
答
在shell脚本中计算数学表达式的一种方法是使用expr。
请问您可否试用它并提出反馈意见?
您也可以使用类似'让结果= 16%5'来计算KSH模。 – mnille