目录

command line

function



command line

command options arguments

options ,执行任务的方式  ,控制命令的动作,选项也称开关switches或者标志flags

arguments ,指定命令使用的数据

空白符,使用空格和制表符作为分隔符的思想,是如此的重要,所以他们有自己的名称,空白符

space 制表符,新行字符(Carriage Return回车符)
[root@localhost script]# set |grep IFS
IFS=$' \t\n'

\n newline 新行字符
\r return  回车符
\t tab     制表符

使用者每输入一个键,cursor 就往后移动一格,直到碰到命令行读进 CR(Carriage Return,由 Enter 键产生)字符为止
所谓的命令行,就是在 shell prompt 与 CR 字符之间所输入的文字。
若从技术细节来看,shell 会依据 IFS(Internal Field Seperator) 将 command line 所输入的文字给拆解为"字段"(word)。
然后再针对特殊字符(meta)先作处理,最后再重组整行 command line 。
其中的 IFS 是 shell 预设使用的字段分隔符,可以由一个及多个如下按键组成:
        * 空格键(White Space)
        * 表格键(Tab)
        * 回车键(Enter)
系统可接受的命令名称(command-name)可以从如下途径获得:
        * 明确路径所指定的外部命令
        * 命令别名(alias)
        * 自定功能(function)
        * shell 内建命令(built-in)
        * $PATH 之下的外部命令
每一个命令行均必需含用命令名称,这是不能缺少的。

简单而言(我不敢说这是精确的定议,注一),command line 的每一个 charactor ,分为如下两种:
* literal:也就是普通纯文字,对 shell 来说没特殊功能。
* meta:对 shell 来说,具有特定功能的特殊保留字符。
 IFS  space,tab,enter
 CR   carriage return
 = $ >等
IFS 是用来拆解 command line 的每一个词(word)用的,因为 shell command line 是按词来处理的。
而 CR 则是用来结束 command line 用的,这也是为何我们敲 ; 命令就会跑的原因。


function

所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。可以将函数看作是脚本中的一段代码,但是有一个主要区别。执行函数时,它保留当前shelll和内存信息。如果执行或调用一个脚本文件中的另一段代码,将创建一个单独的shell,因而去除所有原脚本中定义的存在变量。
函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。

格式两种

function(这个关键字可以不要) func_name(){  
#函数体内容  
}  
func_name(){  
#函数体内容  
}  

函数调用:func_name parm
函数体中,可以通过$1 $2 ...$9接受函数调用中的变量
函数可以通过return 返回函数执行的结果

1、在/home/script/目录下新建函数文件fun-1
2、在fun-1文件中编写函数findit内容
#!/bin/bash
findid ()
{
   if [ $# -lt 1 ]; then #判断函数参数个数
       echo "usage: findit filename";
       return 1;
   fi;
   for loop in "$@"; #遍历调用函数的参数
   do
       find /home/script/ -name $loop -print;
   done;
   return 0
}
3、Shell中载入函数文件
.或source /home/script/fun-1
4、检查载入文件
set  
set命令将在shell中显示所有的载入函数
5、调用函数
findit mysql php #在home目录查找文件mysql和文件php


当你收集一些经常使用的函数时,可以将之放入函数文件中并将文件载入s h e l l。
文件头应包含语句#!/bin/sh,文件名可任意选取,但最好与相关任务有某种实际联系。
一旦文件载入shell,就可以在命令行或脚本中调用函数。可以使用set命令查看所有定义
的函数。输出列表包括已经载入shell的所有函数。
如果要改动函数,首先用unset命令从shell中删除函数,尽管unset删除了函数以便于此函数对于shell或脚本不可利用,但并不是真正的删除。
改动完毕后,再重新载入此文件。有些shell会识别改动,不必使用unset命令,但为了安全起见,改动函数时最好使用unset命令。

调用

同一个脚本中调用函数,只需要在调用前定义即可。
从函数文件中调用函数,这种方法不会创建另一个shell,所有函数均在当前shell下执行。
调用脚本在调用前需要载入函数文件。


/etc/sysconfig/      每一种服务的变量定义
/etc/init.d          每一种服务的脚本
/etc/init.d/funtions 函数文件拥有所有的公用函数