Linux bash 特性、相关变量以及编程
bash 特性之:命令hash
缓存此前执行过的命令(都是外部命令,不记录内嵌命令),加速命令的执行
hash -d 清空指定命令记录 -r 直接清空hash表
bash 特性之一: 变量 程序=指令+数据 指令是有文件提供 数据是由:IO设备,文件,变量,管道
程序:算法+数据结构
变量类型:存储格式、表示数据范围、参与的运算
编程语言
bash把所有变量统称为作为字符型 bash中变量无需事先声明;相当于,把声明和赋值过程同时实现 变量替换,变量名指定的内存数据空间赋值给另外一个变量 变量引用:$(var_name),$var_name 变量命名:字母,数字,下划线,但是不能以数字开头,见名之意,且不能用程序的关键 bash变量类型 本地变量(当前shell),环境变量(当前shell以及子进程),局部变量(当前shell的某个进程的变量),位置参数变量(执行脚本传递的参数,特殊变量(shell内置的有特殊功能的变量比如"?" 查看变量:set ,撤销变量:unset NAME 环境变量 1),export name=value 2),name=value;export name 3),name=value; declare -x name 4),declare -x name=value 注意:bash内嵌了许多环境变量,用于定义bash工作环境(基本都是大写,PATH,HOME,HISTFILE...) 查看环境变量:env,declare -x,printenv 撤销环境变量:unset name 只读变量:declare -r name;或者 readonly name ;生命周期随shell结束而结束
bash特性之多命令执行
~]# COMMAND1;COMMAND2;COMMAND3;....... 逻辑运算 与,或,非,异或(相同为0,不同则为1) 与:短路法则:COMMAND1 && COMMAND2,第一个命令执行状态是否成功,决定后一个 反
shell编程
编程的语言的分类:根据运行分类
编译运行:源代码---> 编译器(编译) ---> 程序文件 C语言, 解释运行:源代码--->运行时启动解释器,由解释器边解释边运行
根据编程过程中功能实现是调用库还是外部程序文件
shell脚本编程 利用系统上的命令及组件进行编程
完整编程 利用库或者编程组件进行编程
编程模型:过程式编程语言和面向对象编程语言 过程式:以指令为中心来组织代码,数据服务于代码 顺序执行,选择执行,循环执行 对象式:以数据为中心来组织代码,围绕数据来组织指令 类(class):实例化对象,method
shell 编程:过程式编程,解释运行,依赖于外部程序文件运行
如何写shell脚本: 脚本第一个行:顶格:给出shebang,解释器路径,用于指明解释执行当前脚本的解释器程序文件
常见的解释器
#!/bin/bash #!/usr/bin/python #!/usr/bin/perl
编辑器:nano,sed, vim,vi
命令的堆积:但是很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足,以避免其运行过程发生错误而终止
运行脚本: 运行的过程:是先启动/bin/bash (#!/bin/bash),才开始执行这个脚本文件内的命令(堆积的命令) 1),赋予执行权限,并直接运行此脚本程序文件 2),直接用解释器运行,将脚本以命令行参数传递给解释器程序;~]# bash 脚本文件 3)"." 或者 source 注意:空白行直接被忽略,如果要直接加入echo,注释用"#",
bash 配置文件 profile类:为交互式登陆的shell进程提供配置 su – username ;终端输入账号和密码登陆的终端 bashrc类:为非交互式登陆shell进程提供配置 su username ;图形界面下打开终端:运行脚本也是(执行脚本是打开了一个子shell)
profile类: 全局:对所有用户都生效 /etc/profile /etc/profile.d/*.sh 用户个人:仅对当前用户有效:~/.bash_profile 功能:1,用于定义环境变量 2,运行命令或脚本 bashrc类: 全局:多有所有用户生效 /etc/bashrc 用户个人:仅对当前用户有效:~/.bashrc 功能: 1,定义本地变量 2,定义命令别名
配置文件读取次序:
交互式登陆shell:/etc/profile --> /etc/profile.d/*---> ~/.bash_profile--> ~/.bashrc --> /etc/bashrc 非交互式登陆shell: ~/.bashrc --> /etc/bashrc --> /etc/profile.d/* ~]# source 配置文件 或者 ~]# . 配置文件 #重启配置文件,让当前shell生效
原创文章,作者:不忘初衷,如若转载,请注明出处:http://www.178linux.com/65254