bash是调用机器上命令程序文件进行编写的。

外部命令由各应用程序提供

 

程序是由:指令(算法)+数据(数据结构)

 

面向过程

以指令为中心,设计算法,数据服务于算法

面向对象

以数据为中心,设计数据结构,程序服务于数据结构

bash的流程控制语句:

顺序执行:逐个执行

选择执行:按条件选择多条中的一条执行

循环执行:按条件执行制定次数

 

变量:程序运行后有名字的内存空间,可反复调用修改

本地变量:当前shell进程有效。

环境变量:在当前shell进程和其子进程都存在。被导出的本地变量

局部变量:某个函数执行过程中存在的。

位置参数变量:脚本中传递给脚本的参数,

特殊变量:

    $?(上一条命令执行结果),0为真,1-255位假

    $*(),

    $@(),

    $#(),

    $$()

变量的值类型:

数值:×××和浮点型

字符:ASCII

bash是字符型的,弱类型的且无须事先声明。

下面可以将变量声明为整数类型

declare –i name=5

let name=5

 

单引号:强引用,其内部的变量会保持原有字符

双引号:弱引用,其内部变量会做替换成为变量值

命令引用:`命令`,$(命令),引用命令的执行结果

 

命名方式:

本地变量

变量名=变量值,默认是字符型

环境变量:

export 变量名

declare –x 变量名

查看:env,printent,export

9月13日,bash总结_中心

生命周期:

自动销毁:shell进程终止会销毁

手动销毁:unset 变量名

 

脚本:是文本文件,由bash从中读取进行执行。

启动脚本:

1,bash 脚本名

2,先给执行权限 脚本名

 

shebang语法格式:第一行写 #!/bin/bash,解释器路径

注释:#内容

自定义状态结果 exit 5,会终止当前进程。

 

有些时候,我们只想要状态结果,不想要状态内容,所以要把结果抛弃

/dev/null,会吞下所有传来的数据然后丢弃。

/dev/zero,会吞下数据然后吐出一堆0.

 

测试表达式:

1,test 表达式。

9月13日,bash总结_中心_02

2,表达式应该这样  [ 表达式 ],如果和括号之间没空格会报错。

也可以写成 [[ 表达式 ]],这叫关键字。

以下都是上面命令的参数

整数测试:

-gt:大于

-ge:大于等于

-lt:小于

-le:小于等于

-eq:相等

-ne:不等于

9月13日,bash总结_应用程序_03


 

字符串测试:

>:大于

<:小于

==:等于

!=不等于

-z $a 是否为空

-n $a 是否不空

=~:测试左侧字符串是否被右侧的模式所匹配

9月13日,bash总结_应用程序_04

 

文件测试:存在性测试

-e(-a) $file:文件是否存在

-f $file:是否存在且为普通文件

-d $file:是否存在且为目录

-h $file:是否存在且为符号链接

-L $file:同上

-b $file:是否存在且为快设备文件

-c $file:是否存在且为字符设备文件

-S $file:是否存在且为套接字文件

-p $file:是否存在且为管道文件

9月13日,bash总结_中心_05

 

权限测试:

-r $file:当前用户对文件是否拥有读权限

-w $file:当前用户对文件是否拥有写权限

-x $file:当前用户对文件是否拥有执行权限

9月13日,bash总结_中心_06

 

-u $file:当前用户对文件是否拥有suid

-g $file:当前用户对文件是否拥有:guid

-k $file:当前用户对文件是否拥有sticky

9月13日,bash总结_应用程序_07

9月13日,bash总结_中心_08

 

-O $file:当前用户对文件是否是文件的属主

-G $file:当前用户对文件是否是文件的属组

9月13日,bash总结_中心_09

 

$file1 –nt $file2 :比较修改时间戳哪个接近当前时间

$file1 –ot $file2 :比较修改时间戳哪个远离当前时间

$file1 –ef $file2 :比较两个文件是否执行同一个inode

9月13日,bash总结_中心_10

 

组合测试条件:

与:[[ 条件1 –a 条件2 ]]

或:[[ 条件1 –o 条件2 ]]

非:[ !条件 ]

每一个条件是指表达式

与: 条件1 && 条件2

或: 条件1 || 条件2

非: !条件

 

代码重用

定义方法:

function name()

{

         内容

}

name()

{

         内容

}

return可以自定义函数状态返回值,一旦遇到return,函数终止



数组是连续的多个独立的内存空间,通过数组名引用

bash4.0以后支持2种:

    传统数组:索引时数字,从0开始 declare -a name

    关联数组:索引可以自定义,使用字符串做索引 declare -A name


    bash支持稀疏格式的数组 {0,,,,6}

赋值:

    1、单个赋值name[5]=value

    2、全部复制name=("value1""value2"...)

    3、指定索引进行赋值name=([0]="value1"[3]="vlue3")

    4、可以用read 赋值 read -a name

数组的长度可以用

    ${#name[*|@]}来查看

9月13日,bash总结_应用程序_11


$RANDOM取得0-32767的随机数