逻辑运算:
true,false
1 0
与:&& 或:|| 非:!
短路运算:
&&:有0则为0
||:有1则为1
写一个脚本,实现如下功能:
1、如果bash用户存在,则显示其存在,否则添加之
显示添加的用户id号等信息
2、如果bash用户登录了当前系统,就显示bash用户在线,否在显示其不在线
变量
bashs属于弱类型,即无需指定类型,默认均为字符型,参与运算会自动进行隐士类型转换。
bash变量的种类:
以变量生效范围为标准:
本地变量: 生效范围为当前的shell进程,对其它shell进程及子shell无效
环境变量: 生效范围为当前shell及其子shell
declare声明一个环境变量
局部变量: 当前shell进程中的某代码片段(通常指函数)
位置变量: $1,$2,$3…表示在脚本中调用通过命令行传递的参数。
特殊变量: $? $0
$? 上一条命令的返回值,0表示正确执行
$0 命令本身(我们自己传递的变量从$1开始,$1前面的值即为$0)
本地变量:
变量复制 name=‘value‘
value:
可以是字符串 name=“username“
可以是变量引用 name = $username
命令引用:name=`COMMAND` name=$(COMMAND)
变量引用${name},$name
" " 弱引用,其中的变量引用会被替换成变量值。
'' 强引用,其中的变量引用不会被替换成变量值,而保持原字符串。
显示已定义的所有变量
set
销毁变量
unset name
环境变量
变量声明、赋值
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、不能使用程序中的保留字:例如:if,for,while
2、只能使用字母数字下划线,不能以数字开头
3、见名知义
只读变量:不能修改只,也不能使用unset手动销毁
readonly name
declare -r name
位置变量:
$1,$2,$3...
$0:脚本或命令本身
$*:传递给脚本的所有参数
$@:传递给脚本的所有参数
$#:传递给脚本的个数
shift [n] :表示将前面传递的变量踢走,n默认为1
【shift 2将前面传递的 gg hh 踢走,所以接下来$1就是hha,统计所有参数时就只剩下hha,统计个数为1个】
显示文件行数
bash配置文件
按范围划分:
全局配置
/etc/profile,/etc/profile.d/*.sh
/etc/bashrc
个人配置
~/.bash_profile
~/.bashrc
按功能划分:
profile类:为交互式登录的shell提供配置
(1)定义环境变量
(2)运行命令或脚本
bashrc类:为非交互式登录的shell提供配置
(1)定义命令别名
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
让用户的PATH环境变量的值多出一个路径
配置文件生效的方法:
(1)重新启动shell进程
(2)使用source或.命令进程
./script和source script的区别
./script 启动一个子shell运行脚本,运行完成后回到父shell,脚本中的执行结果对父shell没有影响
source script:直接在当前shell中运行脚本,运行结果对当前shell有影响