bash的配置文件
按生效范围划分:存在两类
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc
按功能划分,存在两类:
profile类:为交互式登录的shell提供配置
全局:/etc/profile,/etc/profile.d/*.sh
个人:~/.bash_profile
功用:
1.用于定义环境变量
2.运行命令或脚本
bashrc类:为非交互式登录的shell提供配置
全局:/etc/bashrc
个人:~/.bashrc
功用:
1.定义命令别名
2.定义本地变量
shell登录:
交互式登录:
1.直接通过终端输入账号密码登录
2.使用"su - username"或"su -l username"切换的用户
读取顺序
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登录:
1.su username
2.图形界面下打开的终端
3.执行脚本
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
编辑配置文件定义的新配置的生效方式:
1.重新启动shell进程
2.使用source或.命令进程
Note:使用source或.执行会有些副作用,比如设定在~/.bash_profile中的个人环境变量会重复赋值
bash中的算数运算
+,-,*,/,%,**......
# help let
实现算术运算:
1.let var=算式表达式
2.var=$[算术表达式]
3.var=$((算术表达式))
4.var=$(expr arg1 arg2...)
乘法符号须转义 例如:mul=$(expr $num1 \* $num2)
bash有内建的随机数生成器:$RANDOM(生成1-32767的随机数)
增强型赋值:
+=,-=,*=,/=,%=
let varOPERvalue
例如:
count=$[$count+1]可以写成let count+=1或count++
自增,自减
let var+=1
let var++
let var-=1
let var--
练习1:写一个脚本
计算/etc/passwd文件中的第10个用户和第20个用户的ID之和
练习2:写一个脚本
传递两个文件路径路径作为参数给脚本,计算这两个文件中所有空白行之和
练习3:统计/etc,/var,/usr目录共有多少个一级子目录和文件
条件测试:
判断某需求是否满足,需要由测试机制来实现:
Note:专用的测试表达式需要由测试命令辅助完成测试过程
测试命令:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
Note:EXPRESSION前后必须有空白字符
bash的测试类型:
数值测试:
-gt:是否大于
-ge:是否大于等于
-eq:是否等于
-ne:是否不等于
-lt:是否小于
-le:是否小于等于
字符串测试:
==/=:是否等于
>:是否大于
<:是否小于
!=:是否不等于
=~:左侧的字符串是否能够被右侧的PATTERN所匹配到
Note:此表达式一般用于[[ ]]中
-z "STRING":测试字符串是否为空,空则为真,不空则为假
-n "STRING":测试字符串是否不空,不空为真,空则为假
Note:用于字符串比较时用到的字符串要使用引号
注意1:脚本中一旦遇到exit命令,脚本会立即终止,终止退出状态取决于exit命令后面的数字
注意2:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
练习:写一个脚本
接受一个文件路径作为参数: