时间就是金钱
效率就是生命
一、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
//第一个执行成功,就不会执行第二个
//第一个执行失败,会执行第二个,并显示第一个的执行结果
非:取反
!
异或:判断是否不同