#!/bin/bash
#
m=${1:-5} //之前没有加这条,后来直接运行不加参数就悲剧了,系统卡死,出现了死循环
fact(){
if [ $1 -eq 0 -o $1 -eq 1 ];then
echo 1
else
echo $[$1*$(fact $[$1-1])]
fi
}
fact $m
[root@dqysh020073 ~]# sh -x jiecheng.sh //不加参数时,不加上面的那条直接运行会呵呵
+ m=5
+ fact 5
+ '[' 5 -eq 0 -o 5 -eq 1 ']'
++ fact 4
++ '[' 4 -eq 0 -o 4 -eq 1 ']'
+++ fact 3
+++ '[' 3 -eq 0 -o 3 -eq 1 ']'
++++ fact 2
++++ '[' 2 -eq 0 -o 2 -eq 1 ']'
+++++ fact 1
+++++ '[' 1 -eq 0 -o 1 -eq 1 ']'
+++++ echo 1
++++ echo 2
+++ echo 6
++ echo 24
+ echo 120
120
[root@dqysh020073 ~]# sh -x jiecheng.sh 10 //加参数时
+ m=10
+ fact 10
+ '[' 10 -eq 0 -o 10 -eq 1 ']'
++ fact 9
++ '[' 9 -eq 0 -o 9 -eq 1 ']'
+++ fact 8
+++ '[' 8 -eq 0 -o 8 -eq 1 ']'
++++ fact 7
++++ '[' 7 -eq 0 -o 7 -eq 1 ']'
+++++ fact 6
+++++ '[' 6 -eq 0 -o 6 -eq 1 ']'
++++++ fact 5
++++++ '[' 5 -eq 0 -o 5 -eq 1 ']'
+++++++ fact 4
+++++++ '[' 4 -eq 0 -o 4 -eq 1 ']'
++++++++ fact 3
++++++++ '[' 3 -eq 0 -o 3 -eq 1 ']'
+++++++++ fact 2
+++++++++ '[' 2 -eq 0 -o 2 -eq 1 ']'
++++++++++ fact 1
++++++++++ '[' 1 -eq 0 -o 1 -eq 1 ']'
++++++++++ echo 1
+++++++++ echo 2
++++++++ echo 6
+++++++ echo 24
++++++ echo 120
+++++ echo 720
++++ echo 5040
+++ echo 40320
++ echo 362880
+ echo 3628800
3628800
(1) ${value:-word}
当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.
(2) ${value:=word}
与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将
word赋值给value
(3) ${value:?message}
若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若
此替换出现在Shell程序中,那么该程序将终止运行)
(4) ${value:+word}
若变量以赋值的话,其值才用word替换,否则不进行任何替换