shell脚本基础

程序是由指令加数据组成

编程风格分为过程式和对象时

过程式:以指令为中心,数据服务于指令,适合小型程序

对象式:以数据为中心,指令服务于数据,社和大型程序

高级语言的执行方式分为编译型和解释型

编译型:先将高级语言通过编译器编译成二进制代码再执行

解释型:程序编写完成后不转换成二进制代码,在使用时才通过解释器解释运行,不生成二进制程序

shell就是一种解释器

程序的执行分为顺序执行,循环执行,条件执行

bash –n:检测脚本语法错误

bash –x:对脚本进行调试执行

PATH:默认不包括当前目录,要想直接执行脚本,除了要有执行权限,目录权限外还要写路径或将脚本所在路径加入PATH中

设置变量时使用  变量名=变量内容

注意:变量内容默认是字符型,变量内容有空格要用双引号引起来,变量名第一位不能是数字

删除变量时使用后  unset 变量名

bash是弱类型,变量无需事先定义,默认为字符型,参与运算时会自动进行隐式转换,不支持浮点式

变量命名规则:

不能使用程序保留字,如if,for等

只能使用字母,数字,下划线,不能数字开头

见命知意

统一命名规则

小驼峰:第一个单词首字母小写,其余首字母大写

大驼峰:所有单词首字母大写

set命令可以查询所有变量  env可以查询所有环境变量

各种变量范围

本地变量:对当前shell进程有效,对其他shell或当前shell子shell无效

环境变量:对当前shell及子shell有效

局部变量:对当前shell某片断有效

位置变量:$1,$2…..让脚本可以在代码中调用命令行中的参数

特殊变量:

$#:传递给脚本的参数个数

$1:传递给脚本的第一个参数

$@:传递给脚本的所有参数

$*:传递给脚本的所有参数(与$@相比,在加””情况下$*是把所有参数作为一个整体,$@是把每一个参数都单独列出来)

$?:上调命令执行结果

注:$10会被系统识别为$1   0

引用变量时要加$或者${}

定义环境变量可以使用export 或者declear –x

环境变量可以在定义时就声明或在定义普通变量后再进行声明

只读变量可以使用readonly 或者 declear –r

短路与:  第一个为0,后面不用继续运行  第一个为1,第二个必须要参与运算; 

短路或:  第一个为1,后面不用继续运行  第一个为0,第二个必须要参与运算;  

异或:^  异或的两个值,相同为假,不同为真

实现算术运算: 

1. let var=算术表达式

2.var=$[算术表达式] 

3.var=$((算术表达式)) 

4.var=$(expr arg1 arg2 arg3 …) 

5. declare –i var = 数值 

6. echo ‘算术表达式’ | bc

bash中的测试指令 test或 []或[[]]

数值比较:

gt:大于

ge:大于等于

lt:小于

le:小于等于

eq:等于

ne:不等于

字符串比较:

==:等于

!=:不等于

=~:前面的字符串能被后面的表达式所匹配(一般用在[[]]中)

>:大于

<:小于(<>比较的是字符的ascii码)

-z:字符串是否为空

-n:字符串是否为非空

存在性及类别测试

-e:文件是否存在

-b:文件是否为块设备文件

-c:文件是否为字符设备文件

-d:文件是否为目录文件

-f:文件是否为普通文件(包括了链接文件)

-p:文件是否为管道文件

-h/-L:文件是否为符号链接文件

-S:文件是否为套接字文件

-s:文件是是否存在且非空

-O:当前用户是否为该文件属主

-G:当前用户是否为该文件属组

-N:文件自上一次被读取后是否被修改过

双目测试:

#1-ef #2:两个文件是否指向同一个inode

#1-nt #2:文件1是否新与文件2

#1-ot #2: 文件1是否旧与文件2

组和测试

&&:并且

||:或者

!:非

#1&&#2 = [  #1 –a #2  ]

#1||#2 = [  #1 –o #2  ]

注:正则表达式需要写在[[]]中,而-a,-o则不支持[[]]

使用bash运行脚本相当于打开一个子shell运行

.或source相当于在当前shell运行命令

if语句使用方式

单分支:

if 判断条件;then

代码

else

代码

fi

多分支:

if 判断条件;then

代码

elif判断条件;then

代码

……

else

代码

fi

 

raad命令可以实现交互式输入变量

read –p:可以输出提示信息并接受变量

read –t:指定命令输入时间

case命令用法(case支持glob通配符):

case $变量 in 

判断条件)

分支1

;;

判断条件)

分支2

;;

……….

*)

默认分支

;;

esac

循环执行:将代码重复运行多次

for循环用法(比较适合数字)

for 变量名 in 列表;do

循环体

done

依次将列表中元素赋给变量,每次赋值后就执行循环体,知道列表中元素耗尽

列表生成方法:

1、直接给出

2、整数列表   {start…end}   $seq [start  end]

3、返回到列表的命令

4、使用通配符

5、变量引用

while循环用法

while 条件;do

循环体

done

进入循环前要先判断条件是否成立,每次循环后再次进行判断,直到条件不满足为止

判断条件中一般应有循环控制变量,该变量会随着循环体进行而修正

until循环用法

until 条件;do

循环体

done

进入循环前要先判断条件是否成立,不成立进入循环,成立则跳过

break:退出当前循环

exit:退出当前shell

continue:结束当次循环,继续下次循环

原创文章,作者:zzzzz1357x1,如若转载,请注明出处:http://www.178linux.com/36831

(0)
zzzzz1357x1zzzzz1357x1
上一篇 2016-08-18
下一篇 2016-08-18

相关推荐

  • 二叉树迭代器算法

    二叉树(Binary Tree)的前序、中序和后续遍历是算法和数据结构中的基本问题,基于递归的二叉树遍历算法更是递归的经典应用。 假设二叉树结点定义如下: // C++ struct Node {     int value;     No…

    Linux干货 2016-08-15
  • 关于 文本处理工具、正则表达式、grep 的简单举例

                              文本处理工具 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep 文件查看命令:cat,tac,rev cat […

    系统运维 2016-08-08
  • Centos7上利用corosync+pacemaker+crmsh构建高可用集群

    一、高可用集群框架 资源类型:     primitive(native):表示主资源     group:表示组资源,组资源里包含多个主资源     clone:表示克隆资源     master/…

    Linux干货 2016-05-29
  • 网络26期 第一周作业

    1、描述计算机的组成及其功能。 计算机由cpu、存储器(内存)、输入设备(Input)、输出设备(Output),其中cpu中的运算器和控制器是必要的,这拥有以上五个部件就可以组成一个能正常工作的计算机,但是内存无法永久保存数据于是还需要一个硬盘来永久保存数据,硬盘也是存储器的一种但是它却是一个io设备,即至少是输入或者输出设备中的一种.所以我将其分开来说了…

    Linux干货 2017-01-18
  • 系统基础之shell脚本编程详解2

    shell脚本编程2:   在上节我们介绍了shell脚本编程,但只是介绍了基础的内容,下面将为大家介绍shell的脚本的高级用法,判断与循环.判断分为两种:if语句和case语句;循环分为三种:for语句,while语句,until语句,select语句 判断语句:  在脚本的编写中,我们要使用大量的数据和命令,但对于使用的数据,我们要…

    Linux干货 2016-08-19
  • 初识varnish

      实验拓扑 varnish主机    地址192.168.150.137 后端web主机     web1静态服务192.168.150.138     web2动态服务192.168.150.140 varnish的安装及开启 varnish主机: ~]# yum info varni…

    Linux干货 2017-01-05

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-19 09:26

    脚本语法需要总结好,更重要的是多写多练,作业需要好好完成呢