Shell脚本编程的知识点总结

一、变量赋值等:

   ${parameter:-word}:如果parameter为空或未定义,则变量展开为“word”;否则,展开为parameter的值;

   ${parameter:+word}:如果parameter为空或未定义,不做任何操作;否则,则展开为“word”值;

   ${parameter:=word}:如果parameter为空或未定义,则变量展开为“word”,并将展开后的值赋值给parameter

   ${parameter:offset}

   ${parameter:offset:length}:取子串,从offset处的后一个字符开始,取lenth长的子串;

例:

    A=3             A赋值 

echo ${A:-30}     显示为3  

unset A           撤销A的值  

echo ${A:-30}     显示为30 

echo $A          显示为空  

A=${A:-30}      如果A值不空就为A,如果A为空就把30赋值给A  

echo $A          显示为30 

    unset A           撤销A的值  

echo ${A:+30}    显示为空

echo ${A:=30}    显示为30   如果A为空的话不仅把字符串展示为A还把字符串赋值给

echo $A          显示为30  

例:

A='hello world'  

  echo ${A:2:3}  偏移过去2个从第三个字符开始取3个  显示为llo 

  echo ${A:2}    偏移过去2个去后面所有的字符串 显示为llo world 

二、脚本配置文件

      1、脚本:命令的堆砌,按实际需要,结合命令的流程控制实现的源程序

         #/bin/bash         第一行

   后面的#只做注释,不执行

     2、脚本在执行时会启动一个子shell进程:

   命令行中启动的脚本会继承当前shell环境变量

   系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量

     3、  /etc/rc.d/init.d/服务脚本

        服务脚本支持配置文件:/etc/suysconfig/服务脚本同名的配置文件

三、变量

   1、 特殊变量:

     $?: 上一个命令的执行状态返回值

                 程序执行结束

                 程序状态反回代码(0-255

                 0:正确执行

                 1-255 :错误执行,12127系统预留;

     $#: 参数的个数

     $*: 参数列表

     $@: 参数列表

 

   2、本地变量

VARNAME=VALUE:作用域为整个bash进程;

   3、局部变量:

local VARNAME=VALUE:作用域为当前代码段;

 

   4、环境变量:作用域为当前shell进程及其子进程:

export VARNAME=VALUE

   “导出”  

   5、位置变量:$1,$2,......(用于传递参数)

            shift 替换已使用过的位置变量

            shift n  替换n个位置变量

四、脚本中用的特殊命令mktemp

     创建临时文件或目录

         mktemp /tmp/file.XX

      -d: 创建为目录

 

五、信号 :进程间通信的一种方式,一个进程向另外一个进程发送的短小信息,能够实现   控制另外一个进程的运作法则或运作机制    

    trap命令:脚本中,实现信号捕捉,但915无法捕捉

  常见信号

    kill -SIGNAL PID

    1: HUP

    2: INT   终止信号   ctrl +c

    9: KILL     后台

   15: TERM

六、shell中的选择语句

1If语句:

  1)、条件判断,控制结构:

单分支if语句;

      if 判断条件; then

         statement1

         statement2

          。。。。。

        fi

 2)、双分支的if条件语句

      if 判断条件; then

         statement1

         statement2

          。。。。。

     else 

         statement3

        statement4

         。。。。。 

        Fi

 3)、多分支的if语句 

      if 判断条件1; then

         statement1

          。。。。。

     elif  判断条件then

          statement2

          。。。。。

     elif  判断条件then

        statement3

         。。。。。

     else  

          。。。。。 

        Fi

 4)、case语句:

    case  switch in          (注:swich是变量)

value1

    statement

    。。。

    ;;

value1

    statement

    。。。

    ;;

*

    statement

    。。。

    ;;

esac

2、循环语句

  1)、for循环:

     for 变量 in 列表; do

        循环体

     done 

   注:遍历完成后退出

  2)、while循环语句:

    while 判断条件(直到条件不符合停止循环); do

   statement

   。。。

   。。。

   done

  3)、until循环语句

     until 判断条件(直到条件符合停止循环) ; do

         statement

          。。。

          。。。

     done

3、特殊循环语句:

   while的特殊用法一:

   while :;do

     tatement

     。。。

     。。。

   done

这是个死循环,会一直循环去,除非exit退出脚本或break跳出循环

  while的特殊用法二:

    while read LINE; do

    statement

   done < /PATH/TO/SOMEFILE

  逐行读取//PATH/TO/SOMEFILE,并赋值给LINE

七、shell中使用的算术运算 

     A=3

     B=6

   1let 算术表达式

      let C=$A+$B

   let支持的运算

     let a+=$q  就是let a=a+$q

     a++   a的自加1

     a--   a自减1

     --a

     ++a

   2.$[算术运算表达式]

        C=$[$A+$B]

   3$((算术表达式))

        C=$(($A+$B))

   4.expr 算术表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用

        C=`expr $A + $B`