18.shell脚本基础-bash变量和逻辑运行
bash特性及shell脚本编程初步
终端:附着在终端的接口程序:
GUI:KDE,GNOME,Xfce
CLI:/etc/shells
bash的特性:
命令行展开:~,{}
命令别名:alias,unalias
命令历史:history
文件名通配:glob
快捷键:Ctrl+a,e,u,k,l
命令补全:$PATH
路径补全:
bash特性之:命令hash
缓存此前的命令查找结果:key-value
key:搜索键
value:值
只有外部命令才有,hash和type都是内部命令,type hash/help hash
bash特性之:变量
程序:指令+数据
指令:由程序文件提供
数据:IO设备、文件、管道、变量
程序:算法+数据结构
变量名+指向的内存空间
变量赋值:name=value
变量类型:存储格式、表示数据范围、参与的运算
编程语言:强类型变量
弱类型变量
bash把所有变量统统视作字符型
bash中的变量无需事先申明:相当于,把申明和赋值过程同时实现
变量替换:把变量名出现的位置替换为其所指向的内存空间中的数据
变量引用:$(var_name),$var_name
父子shell
变量名:变量名只能包含数字、字母、下划线,而且不能以数字开头:
变量名:见名知义,命名机制遵循某种法则;不能够使用程序的保留字;if、else、then、while等等;
bash变量类型:
本地变量:作用域仅为当前shell进程;
环境变量:作用域为当前shell进程及其子进程;
局部变量:作用域仅为某代码片段(函数上下文);
位置参数变量:当执行脚本的shell进程传递的参数;
特殊变量:shell内置的有特殊功用的变量;
$?:
0:成功
1-255:失败
本地变量:
变量赋值:name=value
变量引用:$(name),$name
"":变量名会替换为其值;
‘’:变量名不会替换为其值;
查看变量:set
撤销变量:unset name
注意:此处非变量引用;
环境变量:
变量赋值:
(1) export name=value
(2) name=value
export name
(3) declare -x name=value
(4) name=value
declare -x name
变量引用:$(name),$name
注意:bash内嵌了许多环境变量(通常为全大写字符),用于定义bash的工作环境
PATH,HISTFILE,HISTSIZE,HISTFILESIZE,HISTCONTROL,SHELL,HOME,UID,PWD,OLDPWD
查看环境变量:export,declare -x,printenv,env
只读变量:
(1)declare - r name
(2)readonly name
只读变量无法重新赋值,并且不支持撤销:存活时间为当前shell进程的生命周期,随shell进程终止而终止
bash特性命令之命令执行:
~]#COMMAND1;COMMAND2;COMMAND3;...
逻辑运算:
运算数:真(true,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
短路法则:
~]# COMMAND1 && COMMAND2
COMMAND1为“假”,则COMMAND2不会再执行;
否则,COMMAND1为“真”,则COMMAND2必须执行;
~]# COMMAND1 || COMMAND2
COMMAND1为“真”,则COMMAND2不会再执行;
否则,COMMAND1为“假”,则COMMAND2必须执行;
示例:~]# id $username || useradd $username