一、shell中使用算术运算

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`

二、shell中的选择语句

If语句:

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

case语句

    case  switch in          (注:swich是变量)

value1

    statement

    。。。

    ;;

value1

    statement

    。。。

    ;;

*

    statement

    。。。

    ;;

esac

二、循环语句

for循环:

for 变量 in 列表; do

   循环体

done 

注:遍历完成后退出

如何生成列表:seq [起始数 [步进数]] 结束数

所以列表可以有以下方式:

1、 1 2 3 4 5 ........

1{1...100}

2`seq [起始数  [步进数]]  结束数`

如:表示15

方式一: for i in 1 2 3 4 5  ; do

循环体

 done

方式二:for i in 1...5}  ; do

循环体

 done

方式三:for i in `seq 1 5` ; do

循环体

 done

for的另一种循环,类似c语言:

如:

for  ((i=1i<5i++)); do

   statement

   。。。

   。。。。

 done

while循环语句:

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

statement

。。。

。。。

done

until循环语句

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

   statement

   。。。

   。。。

done

特殊循环语句:

while的特殊用法一:

while :;do

   tatement

   。。。

   。。。

done

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

while的特殊用法二:

while read LINE; do

statement

done < /PATH/TO/SOMEFILE

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

、变量赋值等:

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

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

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

${parameter:offset}

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

四、给加上脚本配置文件

所谓配置文件就是脚本的一些变量在另一个文件中存的,然后该脚本可以获取配置文件的内容,在脚本中第一行代码中写入 . /PATH/TO/FILE_CONF

五、变量

局部变量(生命周期为所在的函数内)

local VAR_NAME=

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

本地变量:arname=vlue  作用域为整个当前bash进程

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

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

            shift n  替换n个位置变量

shift命令的使用:

位置变量在函数里代表函数的参数,$1表示第一个参数,$2表示函数的第二个参数

位置变量在整个脚本里则代表脚本的参数,$!代表该脚本的第一个参数$2代表第二个,以此类推,而shfit则是释放位置变量的,如过在$1被传递了参数后,加一个shift,则释放$1,

此时第二个参数就是$1,第三个参数变为$2,以此类推

特殊变量:$?  上一个命令的执行状态的返回值;

                 程序执行结束

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

                 0:正确执行

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

            $# 参数的个数

            $* 参数列表 

            $@ 参数列表

            $0: 执行脚本时的脚本路径及名称

            $RANDOM  生成随机数 0-32768 

            $URANDOM

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

创建临时文件或目录

mktemp /tmp/file.XX

-d: 创建为目录

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

常见信号

kill -SIGNAL PID

1: HUP

2: INT

9: KILL

15: TERM

 注:一行执行多个语句,语句间用分号分隔