时间就是金钱

效率就是生命

一、bash编程

 |---------------|

|应用           |
|-----------|   |
|壳|库函数 |    | //可以直接针对系统调用编程
|---------------|
|系统调用       |
|---------------|
|内核           |
|---------------|
|硬件           |
|---------------|
    现在程序开发更重视程序开发的速度-因此Python是未来的趋势
    终端:附着在终端的接口程序
    GUI:KDE,GNome,Xfce
    CLI: /etc/shells 安全shell

二、bash特性总结

    bash特性:

命令行展开:~,{}

命令别名:alias,unalias

命令历史:history

文件名通配:glob

快捷键:ctrl+{a,e,u,k,l}

路径补全:

    bash特性之:命令hash//命令补全

hash //保存命令的执行结果

每一次查找PATH变量,会很慢,所以保存上一次命令的查找结果

//再次运行一个命令的时候先查找hash然后查找PATH

hash自己是shell内建的命令,不用做hash,只会对外部命令做hash

目的是加快命令查找速度

缓存此前命令的查找结果:key-value

key:搜索键

value:值

-d 删除某个记录

hash -d dir //删除dir记录 

-r 清空所有记录

                hash查看命令补全记录

三、bash特性之变量

bash的特性之一:变量 //bash为弱类型

    程序:指令+数据

指令:由程序文件提供

数据:IO设备、文件、管道

    程序:算法+数据结构

    变量名:指向内存中一段空间的起始地址

    变量赋值:name=value

     bash只有两种类型:int和char

默认为char

    变量类型:其实是变量中存储值得数据类型

    编程语言:

        强类型变量:变量类型定以后,是不允许随便转换的

    c,除非进行类型转换

弱类型:bash,

    假若数字和字符进行转换,自动进行转换

    bash默认为字符型

    bash中的变量无需事先声明,强类型需要实现声明变量类型

    相当于,把声明和赋值过程同时实现

    变量替换:把变量名的位置替换为其所指向的内存空间中数据

    变量引用:${var_name},$var_name

    变量声明:类型、变量名

        变量名的命名方式:字母、数字、下划线任意组合,但是不能以数字开头

    见名知义:命名机制遵循某种法则

    不能使用保留字段:if,else,then,while等

变量类型:bash默认为字符类型,//按存储类型划分

    字符型:

    数值型:

变量类型:根据作用范围划分

    本地变量:作用域仅仅是当前shell

    环境变量:当前shell及其子shell

    局部变量:当前shell的某一个代码片段(函数上下文)

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

    特殊变量:shell内置的有特殊功用的变量

        $?:

0:成功

1-255:失败

pstree //显示进程数

    1.本地变量

        变量赋值:name=value

变量引用:${name},$name //有些是需要用引号的

"":弱引用:变量名会替换其值

'':强引用:变量名不会替换其值

查看变量:set

变量引用:unset name

注意:此处非变量引用,不使用$

    2.环境变量

变量赋值:export和declare

(1)export name=value

(2)name=value

export name

(3)declare -x name=value

    -x 设置为环境变量

    -i ×××变量

    -r 只读变量,无法撤销

        readonly name //即可设置变量为只读,无法撤销

无法重新赋值

当前shell进程终止后才会撤销

(4)name=value

declare -x name

变量引用:${name},$name

注意:bash内嵌了很多环境变量,用于定义bash的工作环境

                例如:PATH,HISTFILE,HISTFILESIZE,HISTCONTROL,SHELL,UID,                                PWD,HOME全是大写

查看:export,declare -x ;printenv,env

撤销:unset name

    3.局部变量://多为函数内部变量

#!/bin/bash

function test(){

locale a   //声明局部变量

}


四、bash特性之多命令执行与逻辑运算

bash特性之多命令执行:

COMMAND1;COMMAND2;COMMAND3;...

逻辑运算:只有真/假

真:true,yes,on,1

假:false,no,off,0 

与:同时满足

    &&

    id user1 && echo ”yes" 

    //第一个失败,第二个就不会执行

    //第一个成功,第二个才会执行

或:只要有一个为真即可

    ||

    id user1 || useradd user1

    //第一个执行成功,就不会执行第二个

    //第一个执行失败,会执行第二个,并显示第一个的执行结果

非:取反

    !

异或:判断是否不同


五、小结

bash的特性:hash,变量

命令hash,命令的缓存记录,提高集中率

变量://根据作用范围划分

本地变量

环境变量:

局部变量

位置参数变量 

特殊变量:

变量赋值

name=value 本地变量 

export name=value,declare -x name=value 环境变量

变量引用:

$name,${name}

变量撤销

unset name

bash脚本编程:运行脚本

#!/bin/bash shebang指定解释器

# 注释

bash配置文件: 

    profile类:登录shell //su - USERNAME,su -l USERNAME

    bashrc类:非登录shell提供 //su USERNAME,shell进程,图形终端的终端

    读取配置文件顺序:

登录式shell:/etc/profile-->/etc/profile.d/*.sh--->~/.bash_profile-->~/.bashrc--->/etc/bashrc  //profile到bashrc

非登录shell:~/.bashrc--->/etc/bashrc-->/etc

          //第一个执行成功,就不会执行第二个

          //第一个执行失败,会执行第二个,并显示第一个的执行结果

非:取反

    !

异或:判断是否不同