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

相关推荐

  • week6

    1、请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白 字符开头的行的行首加#; :%s@^[[:space:]]\+[^[:space:]]@#&@g 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/…

    Linux干货 2016-12-02
  • N26-第十二周

    1、请描述一次完整的http请求处理过程;        1、建立或处理链接:接收请求或拒绝请求        2、接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;接收请求的方式通常是并发访问响应模型        3、处理请…

    2017-05-14
  • 马哥教育网络班第19期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:一种网路装置,负责网路桥接,将网络的多个网段在数据链路层连接起来。 集线器:将多条以太网线或光纤集合连接在同一段物理介质下的装置。工作在物理层。 二层交换机:工作在数据链路层,交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通…

    Linux干货 2016-08-22
  • 8月3号 用户权限作业

     1,当用户xiaoming 对/testdir  目录无执行权限时,意味着无法做哪些操作?   先创建目录/testdir,接着修改目录的/testdir的权限,用xiaoming的身份去进入/testdir目录 [root@localhost ~]# mkdir /testdir [root@l…

    Linux干货 2016-08-08
  • linux 网络管理命令 SS的使用详则

    SS命令 ss命令用来显示处于活动状态的套接字信息,ss迷路可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCO和连接状态信息,而且比netstat更快速更高效。 当服务器的socket连接数量变得非常大时,无论是使用netest命令还是直接  cat/proc/net/tcp 。…

    2017-08-19
  • 第四周作业新

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 ]# cp -r /etc/skel /home/tuser1             &nb…

    2017-02-20

评论列表(1条)

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

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