bash变量和逻辑运行
(一)bash特性及bash脚本编程初步
- 如果相与计算机进行交互,必须有一个终端,以及附着在终端上的接口程序
- GUI:KDE,GNome,Xfce
- CLI:/etc/shells
- bash特性
- 命令行展:~,{}
- 命令别名:alias,unalias
- 命令历史:history
- 文件名通配:glob
- 快捷键:ctrl+a,e,u,k,l
- 命令补全:$PATH
- 路径补全
- 命令hash:
- 缓存此前命令的查找结果:key-value格式
- hash命令
- 直接单独使用,查看缓存的之前的命令
- hash -d COMMAND:删除缓存的某个命令
- hash -r:清空缓存
- 变量:
- 程序=指令+数据
- 指令:由程序文件提供
- 数据:IO设备,文件,管道,变量,等等
- 程序=算法+数据结构
- 变量名+指向的内存空间
- 变量赋值:name=value
- 变量的数据类型:存储格式,数据范围,参与的运算
- 字符类型
- 值类型
- 精确数值类型
- 非精确数值类型
- bash使用弱类型编程语言,
- 把所有变量统统视为字符类型,
- 当做加减运算的时候,自动转化为数值类型
- 不支持浮点类型,除非借助于第三方工具
- 变量无需事先声明
- bash中的变量引用:${Var_Name},花括号可以省略,$Var_Name。有一种情况不能省略花括号,就是字符串组合,比如${animal}s
- 变量名:只能包含数字,字母,下划线,不能以数字开头,不能使用保留字
- bash变量类型:
- 根据作用范围
- 本地变量:当前shell进程,子进程无效
- 变量赋值:name=value
- 变量引用:${Var_Name},花括号可以省略,$Var_Name
- 双引号是弱引用,变量名会替换为其值
- 单引号是强引用,变量不会替换为其值
- 查看变量:set
- 撤销变量:unset NAME
- 环境变量:当前shell进程及其子进程
- 变量赋值:
- 方法一:export name=value,或者分开写,name = value 再export name
- 方法二:declare -x name=value,或者分开写,name=value,再declare -x name
- 变量引用:与本地变量一样。
- bash内嵌了许多环境变量(通常为全大写字符),用于定义bash的工作环境,例如:PATH,HISTFILE,HISTSIZE,HISTFILESIZE,HISTCONTROL,SHELL,HOME,UID,PWD,OLDPWD
- 查看变量:
- export
- declare -x
- printenv
- env
- 撤销变量:unset NAME
- 变量赋值:
- 局部变量:当前shell进程中的某一个代码片段
- 本地变量:当前shell进程,子进程无效
- 只读变量:
- declare -r NAME表示把一个变量变成只读格式
- 或者readonly NAME
- 只读变量无法重新赋值,并且无法撤销,除非shell进程终止
- 位置参数变量:向执行脚本的shell进程传递的参数
- 特殊变量:shell内置的有特殊功用的变量
- $?:上一个命令的执行状态结果,0表示成功,1-255表示各种失败
- 根据作用范围
- 程序=指令+数据
- 多命令执行
- 同一行中用分号分隔:COMMAND1;COMMAND2;COMMAND3;...
- 逻辑运算
- 真:true,yes,on,1
- 假:false,no,off,0
- 与,或,非,异或
- 短路机制:如果前一个命令已经可以判断结果了,后面的命令就不执行了。
- id $UserName || useradd $UserName