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 constant
int_var被設成整數,如果給字串則int_var的值會是0。如果用-r
則constant的值從現在起不能再被改了。