let 'x = x + 1' let 'x = x * 1'注意!!這邊等號右邊的x取值時不用加錢符號,而且在單quote內也可以有空格。 ksh也有內建的,不過這不是每種shell都有的, 比較保險的portable作法是用expr這個外部命令。 請看例子
if [ "$KSH" ] then eval ' add() { result=$((${1} + ${2})) } sub() { result=$(($1 - $2)) } mul() { result=$(($1 * $2)) } div() { result=$(($1 / $2)) } inc() { eval "$1=\$((\${$1} + ${2:-1}))" } dec() { eval "$1=\$((\${$1} - ${2:-1}))" } ' else add() { result=`expr $1 + $2` } mul() { result=`expr $1 * $2` } div() { result=`expr $1 / $2` } sub() { result=`expr $1 - $2` } inc() { eval "$1=\`expr \${$1} + ${2:-1}\`" } dec() { eval "$1=\`expr \${$1} - ${2:-1}\`" }這上面定義了一些副程式,可以在script裡面一樣像呼叫一般命令呼叫。 $((1+1))是一個subshell執行1+1並且傳回結果,下面例子讓我想起我的basic程式
i=0 while [ $((i=$i+1)) -lt 10 ]; do echo $i; done不過$(( ))這跟${VAR%value}一樣只有ksh bash有,最好不要用在需要 portable 的shell程式上。 副程式的position parameters $1, $2 ....跟平常script程式原則一樣。
$ typeset -i int_var $ declare -r constantint_var被設成整數,如果給字串則int_var的值會是0。如果用-r 則constant的值從現在起不能再被改了。