bash特性及bash脚本编程初步

bash特性之命令hash

之前我们讲过用户在执行一个命令的时候bash会遍历环境变量$PATH中所有路径来查找执行文件。而命令hash是用来缓存之前用户使用过的命令下次执行的时候直接搜索hash缓存来减少对$PATH变量中路径的遍历次数,从而提高系统运行效率

hash:hash命令
    hash:列出
    -d COMMAND:删除
    -r:清空

bash特性之变量

变量简单的来说就是让某一个特定的字符串来代表不固定的内容,以一个简单的字眼来代替一个复杂或者容易变动的数据

例如:y=x+z 那么这里y就是变量,x+z就是变量的值

变量赋值:name=VALUE

变量的设置和规则

1.变量与变量内容以=相链接.

2等号两边不能直接链接空格。

3.变量名称只能是英文字母与数字,但是不能以数字开头页不能使用横须的保留字段,例如if,else,then,while等

4.“”里面的变量名会被替换成变量值,''里面变量名则不会被替换成变量值

5.可以使用转义符\来讲特殊符号(如[enter],$,\,空格符….等)编程一般字符

6.命令的引用可以使用反单引号`命令`或者$(命令)来引用

7.通常系统变量使用大写字母表示.自行设置的变量用小写字母以方便判断

8.查看变量:set

9.撤销变量:unset NAME

bash变量的类型

1.本地变量:其作用域仅为当前shell

2.环境变量:作用域为当前shell及其子进程

环境变量可以帮我们达到很多功能,包括主文件夹的变换,执行文件的路径,提示符的显示等等。常见的有HOME,SHELL,HISYSIZE,MALL,UIS,PWD,PATH,LANG…..

3.局部变量:作用域仅为某部分代码片段

4.位置参数变量:当执行脚本的shell进程传递的参数

5.特殊变量:shell内置的有特殊功用的变量;如:$?

bash的环境配置文件

当我们进入bash的时候就会有一堆有用的变量,这些变量都是由环境变量的配置文件提供的,bash在启动时就会依次读取到这些文件。这些配置文件按功能分为两类

profile类:

作用范围:对全局所有的用户有效

/etc/profile;/etc/profile.d/*.sh

对用户个人有效

~/.bahs_profile

功能:1.定义环境变量;2.运行脚本命令

bashrc类:

作用范围:全局所有用户:

/etc/bashrc

个人用户:

~/.bashrc

功用:定义本地变量;定义命令别名

注意:只有管理员可修改全局配置文件

bash特性之多命令执行

在某些时候我们希望可以一次性执行多个命令的话可以在命令中间加;隔开,那么bash会在运行完一个命令之后继续运行下一个命令

COMAND1;COMAND2;COMAND3;……

逻辑运算

第一种方式:布尔运算:

运算数:真;(表示为yrue,yes,on,1)

假;(false,no,off,0)

与运算:条件全部为真结果则为真,否则为假;用&&表示

真&&真=真 ;1&&1=1

真&&假=假 ;1&&0=0

假&&真=假 ;0&&1=0

假&&假=假 :0&&0=0

或运算:条件全部为假结果才为假,否则都为真;用 || 表示

真||真=真 ; 1||1=1

真||假=真 ; 1||0=1

假||真=真 ; 0||1=1

假||假=假 ; 0||0=0

非运算:!表示

!1=0 非真=假

!0=1 非假=真

第二种方式:

EXRPESSINO1 -a EXRPESSINO2 EXRPESSINO1 -o EXRPESSINO2

!EXRPESSINO

短路法则:

COMAND1 && COMAND2

COMAND1为假,则COMAND2不会再执行;其结果一定为假;否则COMAND1为真,则COMAND2必须执行

COMAND1 || COMAND2

COMAND1为真,则COMAND 不会再执行;其结果一定为真;否则COMAND1为假,则COMAND2必须执行 实例:id $username || useradd $usernam

用户是否存在 存在为真,不存在未假,即存在则不执行,不存在就必须执行

shell脚本编程

shell脚本是利用shell的功能所写的一个“程序”这个程序是纯文本文件,将一些shell命令与shell语法想结合,搭配正则表达式,管道命令,IO重定向等功能来达到我们想要处理的目的

shell脚本与其他的编程语言根据其运行方式可以分为两类

编译式:是有源代码经过编译器编译成程序文件,JAVA等为编译式

解释型:源代码是由解释器一遍解释一遍执行,shell属于解释型

以编程模型来分类:

过程式编程语言:是以指令为中心来组织代码,数据是服务于代码的,代表为C,bash

面向对象式编程语言:以数据为中心来组织代码,围绕数据来组织指令,代表c++,python

shell脚本编程是过程式编程,边解释边运行,依赖于外部程序文件

如何写shell脚本

脚本文件的第一行,定格给出解释器路径,用来指明解释执行当前脚本的解释器程序文件比较常见的解释器有:

#!/bin/bash

#!/usr/bin/python

#!/usr/bin/perl

我们这里会使用到文本编辑器nano,nano是一个比较简单的全屏文本编辑器,使用namo NAME 就可以打开一个文件

运行脚本

两种方式:1.赋予执行权限,并直接运行此程序文件;2.直接运行解释器,并将脚本以命令行参数传递给解释器

shell脚本是运行在shell的子进程中

注意:脚本中除了顶格的#之外,余下的所有已#开头的都会被视作注释信息而忽略

练习1:写一个脚本,实现如下功能; (1) 显示/etc目录下所有以大写p或小写p开头的文件或目录本身; #!/bin/bash

ls -dl /etc/[pP]*

(2) 显示/var目录下的所有文件或目录本身,并将显示结果中的小写字母转换为大写后显示; #!/bin/bash

ls -a | tr [a-z] [A-Z]

(3) 创建临时文件/tmp/myfile.XXXX;

#/bin/bash

mktenp /tmp/myfule.xxxxx

原创文章,作者:N24-执念,如若转载,请注明出处:http://www.178linux.com/64252

(0)
N24-执念N24-执念
上一篇 2016-12-19 23:54
下一篇 2016-12-20 12:01

相关推荐

  • 磁盘配额

    磁盘配额 1 启用磁盘配额 首先创建新的分区 /dev/sd5,并创建文件系统。 [root@local ~]# mkfs.ext4 /dev/sda5 由于xfs 不磁盘配额能成功,这里使用ext4. 然后把/dev/sda5分区挂载到 /home [root@local ~]# mount /dev/sda5 /home [root@local ~]# …

    Linux干货 2017-05-02
  • Linux RPM 命令参数使用详解

    rpm 执行安装包: 二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由 RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。 -ivh # 安装显示安装进度–install–verbose–hash。 使用方法如下:   &n…

    2017-04-18
  • Quota和RAID

    高级文件系统管理 磁盘配额 quota 限制用户在某个分区的容量,创建数目的多少!一般实施在家目录 /home 下来限制用户的占用空间 限制某一群组所能使用的最大磁盘配额  (使用群组限制): 限制某一用户的最大磁盘配额  (使用用户限制):它仅能针对整个文件系统来进行设计,无法针对某个单一的目录来设计它的磁盘配额。 限制某一目录 &nb…

    Linux干货 2016-09-01
  • 实战keepalived高可用集群解决方案

    Keepalived定义      Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给…

    2017-05-16
  • 马哥M20-1第一周作业

    作业1:通过echo实现字体闪烁,添加下划线,改变颜色      (1)添加下划线    (2)字体闪烁   (3)改变颜色 作业2:显示前10天的年月日 作业3:screen的使用

    Linux干货 2016-07-29
  • MAN手册各章节功能介绍及快捷键键位整理

    Linux系统中man命令是用于查询命令使用手册的,使用格式 man + 命令。 当使用man命令之后,系统就会在指定的路径中查询命令的使用手册。其中制定路径为$PATH变量指定的路径,或者/etc/man.config文件中MANPATH中指定的路径  其中/etc/man.config中有如下内容: MANPATH /usr/man …

    Linux干货 2016-10-17