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

相关推荐

  • mv命令总结

    mv命令是move的缩写,可以用来移动文件或者将文件改名,是Linux系统下常用的命令,经常用来备份文件或者目录。 命令格式:mv  源文件或目录 目标文件或目录 2.命令功能:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能…

    2017-07-24
  • linux用户与用户组

    一.用户 用户是能够获取系统资源的权限的集合. 二.linux用户组的分类: a.管理员root  :具有使用系统所有权限的用户,其UID为0. b.Centos 6普通用户:即一般用户,其使用系统的权限受限,其UID为500-60000之间Centos7UID为1000-60000之间。 c.Centos 6系统用户:保障系统运行的用户,一般不提…

    Linux干货 2016-10-24
  • 关于find命令的实际应用

    1、查找/var目录下属主为root,且属组为mail的所有文件 2、查找/var目录下不属于root、lp、gdm的所有文件 3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件 4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件 5、查找/etc目录下大于1M且类型为普通文件的所有文件 6、查找/e…

    Linux干货 2016-08-16
  • sed命令的用法和vim编辑器的使用

    一、文本处理工具sed sed [option]….'script] [input-file]… 简介: sed是一种流编辑器,他一次处理一行的内容,处理时把当前处理的行存储在临时缓冲区中,这个缓冲区被称为模式空间,接着用sed命令处理,处理完成后把模式空间的内容送往屏幕,接着处理下一行,知道文件末尾,而文件的内容…

    Linux干货 2016-08-15
  • 内部命令与外部命令——Linux基本命令(3)

    1.     内部命令与外部命令 内部命令:由shell自带的,而且通过某命令形式提供 内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。 外部命令:在文件系统路径下有对应的可执行程序文件 外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。 2.     命令类…

    2017-07-13
  • Linux 基础知识(六.三)

    按找下列要求,写一个脚本 (1)创建目录/tmp/testdir-当前日期时间 (2)在此目录创建100个空文件:file1-file100 (3)显示/etc/passwd文件中位于偶数行的用户的用户名 (4)创建10个用户:user10-user19,密码同用户名 (5)在/tmp创建10个空文件file10-file19 脚本如下: #!/bin/ba…

    Linux干货 2016-11-14

评论列表(1条)

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

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