1. bash的基础特性
1.1 变量类型
决定数据存储格式,存储空间大小,参与运算种类
字符型和数值型(整型,浮点型)
强类型:定义变量时必须指定类型,参与运算必须符合类型要求,调用未声明变量会产生错误
弱类型:无须指定类型,默认均为字符型,参与运算会自动进行隐式类型转换,变量无须先定义可直接调用
变量引用:${var_name}, $var_name
1.2 bash中的变量的种类
根据变量的生效范围等标准
1. 本地变量:生效范围当前shell进程:指对当前shell之外的其他进程,包括当前shell的子shell进程均无效
2. 环境变量:生效范围为当前及其子进程
3. 局部变量:生效范围为当前shell进程中某代码片段(通常指函数)
4. 位置变量:$1,$2...来表示,用于让脚本代码中调用通过命令行传递给它的参数
5. 特殊变量:$?,$0,$*,$@,$#
1.2.1 本地变量
变量赋值:name='value'
可以使用引用:
1. 可以使用直接字符串:name="username"
2. 变量引用:name="$username"
3. 命令引用:name='COMMAND', name=$(COMMAND)
变量引用:${name},$name
" ":弱引用,其中的变量会被替换为变量值
‘ ’:强引用,其中的变量不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
销毁变量:unset name
1.2.2 环境变量
变量声明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用:$name,${name}
显示所有环境变量:export,env,printenv
销毁:unset name
bash有许多的内建的环境变量
PATH,SHELL,UID,HISTSIZE,HOME,PWD,OLD,HISTFILE,PS1
1.2.3 局部变量
1. 不能使用程序中的保留字:例如if,for
2. 只能使用数字,字母及下划线,且不能以数字开头
3. 见名知义
1.2.4 只读变量
readonly name
declare -r name
1.2.5 特殊变量
在脚本代码中调用通过命令行传递给脚本的参数,shift换岗操作
$1,$2...:对应第1,第2等参数
$0:命令本身
$*:传递给脚本的所有参数
$@:传递给脚本的所有参数
$#:传递给脚本的参数的个数
2. bash的配置文件
2.1 按生效范围划分,存在两类
全局配置:
/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
个人配置:
~/.bash_profile, ~/.bashrc
2.2 按功能划分,存在两类
profile类:为交互式登录的shell提供配置
全局:/etc/profile /etc/profile.d/*.sh
个人:~/.bash_profile
公用:用于定义环境变量,运行命令或脚本
bashrc类:为非交互式登录的shell提供配置
全局:/etc/bashrc
个人:~/.bashrc
公用:定义命令别名,定义本地变量
2.3 shell登录
交互式登录:
直接通过终端输入账号密码登录:
使用"su -UserName" OR "su -l UserName"切换用户
/etc/profile -> /etc/profile.d/*.sh ->~/.bashrc_profile
->~/.bashrc->/etc/bashrc
非交互式登录:
su UserName
图形界面下打开的终端
执行脚本
~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh
2.4 编辑配置文件定义的新配置的生效方式
重新启动shell进程
使用source或.命令进程
2.5 问题
1. 定义对所有用户都生效的别名?
/etc/bashrc
2. 给所有登录系统用户输出提示信息?
/etc/profile.d/*.sh
3. 让用户的PATH环境变量的值多出一个路径,例如多出/usr/local/apache2/bin
管理员:~/.bashrc_profile
所有:/etc/profile.d/apache.sh
3. bash中的算术运算
+,-,*,/,%,**
实现运算:
1.let var=算术表达式 2.var=$[算术运算符]
3.var=$((算术表达式)) 4.var=$(expr arg1 arg2 arg3 ...)
增强型赋值:
+=,-=,*=,/=,%=
let varOPERvalue
eg.
let var+=1 let var++
let var-=1 let var--
网友评论