bash的特性之一
history
保存的条数:
环境变量:HISTSIZE
用户退出时的持久保存位置:
环境变量:HISTFILE,通常默认为用户家目录下的.bash_history
此文件中可保存的最大数目:
环境变量:HISTFILESIZE
用法:
history N: 显示最近的N条,包括当前命令自身;
history -c: 清空命令历史
history -d offset: 删除指定的偏移处的命令条目
history -a [/path/to/some_history_file]: 将当前会话中的命令历史写入指定文件
bash调用命令历史列表中的命令:
!#: 执行命令历史中的第#条命令
!!: 执行上一条命令
!string: 执行命令历史中最近一次以string开头的命令;
!$: 调用上一条命令的最后一个参数
ESC, .:功能同上
bash的特性之二:命令补全
根据内建命令或外部命令的查找方式查找以用户指定的字符串开头的命令
如果用户指定的开头字符串能惟一标识某命令,则tab键可补全此命令
否则,则两次tab键可显示所有以指定字串开头的命令
bash特性之三:路径补全
以用户指定的起始路径进行文件名补全查找
每个绝对路径都可以切割为两部分
基名
basename /path/to/somewhere
结果为somewhere
目录名
dirname /path/to/somewhere
结果为/path/to
bash的工作特点:没有返回信息通常最好的信息
每个命令执行结束后,会有一个“执行状态返回值”,有效范围0-255
0: 执行成功
1-255: 执行失败
使用特殊变量$?可以获取最近一条命令的状态返回值
# echo $?
bash特性之四:命令行展开
~: 用户家目录
~USERNAME: 指定用户的家目录
bash特性之五:命令别名和命令引用:
alias
alias ALIAS=COMMAND
别名与命令同名时:
绝对路径
\COMMAND
生效范围:命令行定义的别名,其生效范围为当前会话;
unalias [ALIAS]
-a: 撤消所有别名
bash支持的引用:
''
""
``:引用一个命令的执行结果
$()
bash特性之六:文件名通配(globbing):
*: 任意长度的任意字符
p*d, pad, pbd, pd
*ab*c
?: 匹配任意单字符
[]: 匹配指定范围内的任意单字符
[abc], [a-z], [0-9], [0-9a-z]
[^]:匹配指定范围以外的任意单字符
[^0-9a-z]
字符集合:
[:space:]
[:punct:]
[:lower:]
[:upper:]
[:digit:]
[:alnum:]
[:alpha:]
bash特性之七:输入、输出重定向和管道
程序:
数据来源:输入流
数据目标:输出流
文件:文件系统(内核)
标准输入:0
键盘
标准输出:1
监视器
错误输出:2
监视器
重定向意味着:
改变其标准位置
输出重定向:
COMMAND > POSITION:覆盖输出
COMMAND >> POSITION: 追加输出
错误重定向:
COMMAND 2> POSITION:覆盖输出
COMMAND 2>> POSITION: 追加输出
合并重定向:
COMMAND &> POSITION
COMMAND > POSITION 2> &1
分别重定向
COMMAND > POSTIION 2> POSTION2
输入重定向:
COMMAND < POSITION
<<:Here Document
文本处理命令:tr
tr 'SET1' 'SET2'
-d: 删除指定字符集合中的所有字符
多道输出:
COMMAND | tee POSITION
bash:快捷键
Ctrl+a: 跳转至命令行首
Ctrl+e: 尾
Ctrl+u: 删除命令行首至当前光标所在处之前的所有内容
Ctrl+k: 删除当前光标所在处至命令行尾的所有内容
Ctrl+l: 清屏
Ctrl+c: 中止或取消
Ctrl+z: 把当命令送至后台
bash的特性之八:变量
bash变量类别:
本地变量:只对当前shell进程有效的变量;对其它shell进程无效,包当前shell进程的子进程;
VAR_NAME=VALUE
变量赋值:向变量的存储空间保存数据
变量引用:${VAR_NAME}
"":弱引用,里面的变量会被替换;
'':强引用,里面的所有字符都是字面量,直接输出;
环境变量:对当前shell进程及其子shell有效,对其它的shell进程无效;
定义:export VAR_NAME=VALUE
导出:export VAR_NAME
用户可自义环境变量
bash有许多内置的环境变量
撤消变量:unset VAR_NAME
只读变量:readonly VAR_NAME
局部变量:
对shell脚本中某代码片断有效;通常用于函数本地;
local VAR_NAME=VALUE
位置变量:
$1, $2, ..., ${10}
特殊变量:
$?
bash的配置文件:
profile类:为交互式登录的用户提供配置
全局:
/etc/profile
/etc/profile.d/*.sh
用户:
~/.bash_profile
功用:
1、设定环境变量
2、运行命令或脚本
bash编程
bash的循环语句:
for:遍历有限的元素列表。
for语句的格式:
for VAR_NAME in LIST; do
循环体
done
LIST:列表,中间包括一个或多个元素
例如:创建10个用户,user1, user10
#/bin/bash
#
for user in $(seq 301 310); do
useradd user${user}
done
bash算术运算:
变量:弱类型
如何定义整型变量:
let VAR_NAME=INTEGER_VALUE
如:let a=3
declare -i VAR_NAME=INTEGER_VALUE
例如:declare -i a=3
注意:即使没有定义为整型变量,字符型的数字依然可以参与算术运算;bash会执行变量类型的隐式类型转换。
例如:计算100以内所有正整数之和
#!/bin/bash
#
declare -i sum=0
for i in {1..100}; do
sum=$[$sum+$i]
done
echo $sum