一、了解Shell脚本

 

脚本语言:不需要编译,由解释器解释执行,是一种弱类型语言,弱类型主要是指变量类型,变量是命名的内存空间,所谓变量替换是将变量的名称,替换为变量对应的内存空间存储的值,变量通常不需要事先声明。

 

二、Bash变量类型

 

本地变量:

set VARNAME=value 其中set可以省略

撤销:unset VARNAME

引用的时候:${VARNAME}

用于范围:当前shell进程

局部变量:

local VARNAME=value

撤销;unset VARNAME

引用:${VARNAME}

作用范围:在当前shell进程局部范围内有效环境变量:

export VARNAME=value声明环境变量也叫导出环境变量

撤销:unset VARNAME

引用:${VARNAME}

作用范围:当前shell及其子shell

位置变量$1,$2,....

特殊变量:$$,$?,$#,$@,....

 

bash脚本独立执行:

1,要有执行权限,文件默认都没有执行权限

2,定义好shebang,即必须是脚本的第一行:#/bin/bash

3,所有脚本文件中,所有以#开头的行均为注释行,不会被执行所有命令都会到PATH环境变量所定义的路径下去查找

调试脚本:

bash -x /path/to/script_sh

检查脚本的语法错误,不执行脚本

bash -n /path/to/file.sh

变量名称:

只能包含字母,数字和下划线

不能以数字开头

严格区分大小写

要做到见名知义

命名规范,风格统一

 

三、bash的控制结构和用法

面向过程的编程语言,语言的控制结构有

顺序执行:默认法则,逐条执行各语句

选择执行:条件判断,只有部分是符合条件的,只执行符合条件的部分

布尔测试:真,假

0:真

1-255:假

循环执行:将同一段代码反复执行n次;循环必须要有退出条件,否则就成为了死循环

控制语句:bash循环控制语句for  while  until

Bashfor循环:

事先提供一个元素列表,而后使用变量去遍历此元素列表,每访问一个元素就执行一次循环体,直到元素循环完毕

用法格式:

for VARNAME in 元素元素2 . . .

do

语句1

语句2

done

dofor写在一行需要用分号隔开

列表的生成:

1.可以逐个给出

2.使用通配符实现文件的通配

3.使用命令生成列表

4.命令seq可以生成数字序列:用法`seq 起始数字步长结束数字`不指出步长的话默认一次增加一

Shell脚本中的算术运算:shell不支持浮点数,计算结果中的浮点数会被圆为整数如1.23=11.99=1

表达式方式:

$[expression]:例如:$[$A+$B]

$((expression)):$(($A+$B))

let expression:例如:let E=$A+$B

expr expression:F=`expr $A + $B`

 

bash中条件判断if

单分支if语句

if 条件;then

语句1

语句2

...

fi

双分支if语句

if 条件;then

语句1

语句2

. . .

else

语句1

语句2

fi

多分支if判断语句:

if 条件1;then

语句1

语句2

...

elif 条件2;then

语句1

语句2

...

elif 条件3;then

语句1

语句2

...

else

语句1

语句2

...

fi

 

四、bash的测试类型

 

bash的测试类型包括条件测试 整数测试 字符测试 文件测试 组合测试

1.条件测试:可独立执行的命令不需要使用如下测试方式

[ expresion ]前后要加空格

[[ expresion ]]前后要加空格

test expresion

bash命令

2.整数测试:数值比较符数值2

大于:-gt

大于或者等于:-ge

等于:-eq

小于:-lt

小于或者等于:-le

不等于:-ne

A=$RANDOM生成随机数

3.字符测试:通常要用引号

>:大于

<:小于

==:等于,前后要有空格

=~:判断左边的字符串是否能够被右边的模式匹配:通常用于[[]]双中括号中,一般做行首,行尾锚定,不要要引号[[ $opt1 =~ $opt2 ]]

单目:

-z $STRING:为空则为真,不空则为假

-n $STRING:为空则为假,不空则为真

4.文件测试

格式:操作符文件路径

操作符有:

-f:测试其是否为普通文件,即ls -l时文件类型为-的文件

-d:测试其是否为目录文件,即ls -l时文件类型为d的文件

-e:测试文件是否存在:存在为真,否则为假 [ -e /tmp/test10]

-r:测试文件对当前用户来说是否可读

-w:测试文件对当前用户来说是否可写

-x:测试文件对当前用户来说是否可执行

-s:测试文件大小是否不空,不空则真,空则假

5.组合条件测试

-a :

-o:或

!:非,单目操作符

通常写在[] [[]]

命令组合则用:&&:与

||:或

!:非

 

五、编程需知

 

Bash命令有执行状态返回值:从0255

0:正确执行

1-255:错误执行

Exit [n]指定状态返回值脚本执行的最后一条命令的状态返回值

Bash中特殊变量:$?:用于保存刚刚执行的命令的状态返回值

0:表示成功的执行

1-255:失败,12127,被系统占用了

$@ 所有的参数可以返回一个参数的列表,$*:所有位置参数,也可以返回一个参数的列表

$#:所有位置参数的个数可以使用exit命令在脚本中自定义脚本执行状态返回值,如果不定,脚本执行状态返回值取决于脚本执行结束前最后执行的那个语句的状态

$0:返回脚本名称