-
资源密集型的任务, 尤其在需要考虑效率时(比如, 排序, hash等等).
-
需要处理大任务的数学操作, 尤其是浮点运算, 精确运算, 或者复杂的算术运算(这种情况一般使用C++或FORTRAN来处理).
-
有跨平台移植需求(一般使用C或Java).
-
复杂的应用, 在必须使用结构化编程的时候(需要变量的类型检查, 函数原型, 等等).
-
至关重要的应用, 比如说为了这个应用, 你需要赌上自己的农场, 甚至赌上你们公司的未来.
-
对于安全有很高要求的任务, 比如你需要一个健壮的系统来防止入侵, 破解, 恶意破坏等等.
-
工程的每个组成部分之间, 需要连锁的依赖性.
-
需要大规模的文件操作(Bash受限于顺序地进行文件访问, 而且只能使用这种笨拙的效率低下的一行接一行的处理方式. ).
-
需要多维数组的支持.
-
需要数据结构的支持,比如链表或数组等数据结构.
-
需要产生或操作图形化界面GUI.
-
需要直接操作系统硬件.
-
需要I/O或socket接口.
-
需要使用库或者遗留下来的旧代码的接口.
-
个人的, 闭源的应用(shell脚本把代码就放在文本文件中, 全世界都能看到).
shell的参数
(1) 位置参数
由系统提供的参数称为位置参数。位置参数的值可以用$N得到,N是一个数字,如果为1,即$1.类似C语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从0开始。第0号为程序名字,从1开始就表示传递给程序的参数。如$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推。
(2 )内部参数
$#:命令行或者是位置参数的个数
$*:所有的位置参数,被作为一个单词.注意:"$*"必须被""引用.
$@:与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递,并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的单词.注意:"$@"必须被引用.
$-:传递给脚本的falg(使用set 命令).注意:这起初是ksh 的特征,后来被引进到Bash 中,但不幸的是,在Bash 中它看上去也不能可靠的工作.使用它的一个可能的方法就是让这个脚本进行自我测试(查看是否是交互的).
$!:在后台运行的最后的工作的PID(进程ID).
$_:保存之前执行的命令的最后一个参数.
$?:命令,函数或者脚本本身的退出状态
$$:脚本自身的进程ID.这个变量经常用来构造一个"unique"的临时文件名.