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 10:10
下一篇 2016-08-18 10:10

相关推荐

  • LINUX基础知识

    计算机的组成及其功能。 现代计算机体系将计算机分为控制器、运算器、存储器、输入设备和输出设备5个部分 *控制器:控制器是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,并根据具体要求进行控制、调度程序、数据、地址,协调计 算机各个部分工作,协调计算机各部分工作及内存、IO设备等的访问 *运算器:运算器是对数据进行各种算数运算和逻辑运算也就是对数据…

    Linux干货 2018-02-25
  • find使用详解

    文件查找是根据文件的各种属性去找到相对应的文件。 文件查找分为实时查找和非实时查找。     非实时查找是根据索引来进行查找;虽然非实时查找查询速度快,但在构建索引时相当占用资源,只有在系统空闲时才能进行,这样有可能会造成索引内容与当前系统中文件的状态不一致的情况,所以查找结果有可能会不准确。   …

    Linux干货 2015-03-18
  • httpd应用举例

    应用举例1、基于用户和组认证的方式访问ftp         1、编辑配置文件/etc/httpd/conf/httpd.conf,并使用httpd -t 检查语法,并systemctl reload httpd       &n…

    Linux干货 2016-10-23
  • Linux安全和加解密

    概述:     所有业务的正常运转,离不开一个安全的运行环境,系统安全性直接关系到业务稳定、可靠、以及可用性,本章就介绍一些系统安全相关的话题,具体包括:        1、加密基础概念     2、CA和证书的基础概念  &nb…

    Linux干货 2016-09-23
  • 网络管理之配置静态ip和多网卡绑定

    不知怎的,这几天教室的网络异常诡异,各种不稳定啊。原先小编都是通过自动获取(dhcp)的方式来进行网络连接的,现在这种网络情况下需要(static)的方式来配置一个固定的ip。步骤如下: 一、在终端中输入:vim /etc/sysconfig/network-scripts/ifcfg-eth0 二、进行编辑并保存退出 三、重启网络服务:service ne…

    2017-09-10
  • HAProxy基于KeepAlived实现Web高可用及动静分离

    前言 软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。HAProxy相比LVS的使用要简单很多,但跟LVS一样,HAProxy自己并不能实现高可用,一旦HAProxy节点故障,将会影响整个站点。本文带来的是HAProxy基…

    Linux干货 2015-06-25

评论列表(1条)

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

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