文件头
#!/bin/bash
Shell命令
type
type [-tpa] name
type:不加任何参数时,type会显示出name是bash内部命令还是外部命令
-t : 加如参数t,会显示下面字符的含义
file:表示外部命令
alias:表示该命令的别称
builtin:表示bash内置命令
-p:如果是外部命令,显示其路径
-a:会将PATH变量定义的路径中,含有name以及其别名中含有name的命令列出来
echo
echo ${PATH}
变量显示
export
功能说明:设置或显示环境变量(将自定义的变量设置为环境变量)。
语 法:export [-fnp][变量名称]=[变量设置值]
补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。
参 数:
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
子进程会继承父进程的环境变量,不会继承父进程的自定义变量
declare
声明变量类型
declare [-aixr] variable
+/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性;
-f:仅显示函数;
r:将变量设置为只读;
x:指定的变量会成为环境变量,可供shell以外的程序来使用;
i:[设置值]可以是数值,字符串或运算式。
a:声明数组
“
键盘左上角的单引号,在shell中可以先执行命令
例:进入内核模块,需要用uname -r命令查询内核号
cd /lib/modules/`uname -r`/kernel
cd /lib/modules/$(uname -r)/kernel
unset
取消变量
env
查看环境标量
set
查看所有环境变量
随机数获取
echo $RANDOM
/dev/random文件会生成0-32767之间的随机数,上述变量代表这个文件
read
读取来自键盘的输入
array
变量的操作
- ${变量#关键词} 若变量内容从头开始的数据符合『关键词』,则将符合的最短数据删除
- ${变量##关键词} 若变量内容从头开始的数据符合『关键词』,则将符合的最长数据删除
- ${变量%关键词} 若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据删除
- ${变量%%关键词} 若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据删除
- ${变量/旧字符串/新字符串} 若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』
- ${变量//旧字符串/新字符串} 变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』
history
返回目前shell的历史命令记录
n 返回最近n条
-c 清除历史记录
-a 将目前的历史记录加入到histfiles中,如果没有histfiles,则默认写入~/.bash_history
-r 从histfiles读入命令数据到history
-w 写出数据到histfiles
!number 执行第几条命令的意思(命令的条数是在history中记录)
!command 执行记录中command开头的那个命令
!! 执行上一个命令
cut
cut -d '分割字符' -f fields
以'分割字符'将一段信息,并取出fields段
cut -c 字符范围
取出字符范围对应的字符
grep
查找对应的信息,将该行返回
grep [option] "string_to_find" filename
-i:忽略搜索字符串的大小写
-n:输出行号
-l:输出能够匹配模式的文件名,相反的选项为-L
-q:静默输出
-c:计算匹配成功行数
-v:取反,即输出不匹配的那些文本行
-o:输出匹配到的文本部分
-e:匹配多个正则表达式
string_to_find为需要匹配的模式,可以填写字符串或者正则表达式
filename为需要查找的文件的名称
sort
用法:sort [选项]... [文件]...
串联排序所有指定文件并将结果写到标准输出。
排序选项:
-b, --ignore-leading-blanks 忽略前导的空白区域
-d, --dictionary-order 只考虑空白区域和字母字符
-f, --ignore-case 忽略字母大小写
-g, --general-numeric-sort 按照常规数值排序
-i, --ignore-nonprinting 只排序可打印字符
-n, --numeric-sort 根据字符串数值比较
-r, --reverse 逆序输出排序结果
其他选项:
-c, --check, --check=diagnose-first 检查输入是否已排序,若已有序则不进行操作
-k, --key=位置1[,位置2] 在位置1 开始一个key,在位置2 终止(默认为行尾)
-m, --merge 合并已排序的文件,不再进行排序
-o, --output=文件 将结果写入到文件而非标准输出
-t, --field-separator=分隔符 使用指定的分隔符代替非空格到空格的转换
-u, --unique 配合-c,严格校验排序;不配合-c,则只输出一次排序结果
wc
wc(选项)(参数)
选项
-c或--bytes或——chars:只显示Bytes数;
-l或——lines:只显示列数;
-m :显示字符数
-w或——words:只显示字数。
tee
双向重定向
tee [-a] file
tee将standard output转存一份到文件,并将同样的数据继续送到stdout
-a:以累加的方式,将数据加入文件
uniq
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
-c或--count 在每列旁边显示该行重复出现的次数。
-d或--repeated 仅显示重复出现的行列。
-u或--unique 仅显示出一次的行列。
-f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
-w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。
--help 显示帮助。
--version 显示版本信息。
[输入文件] 指定已排序好的文本文件。
[输出文件] 指定输出的文件。
字符转换命令
tr [-ds] SET1 ...
-d 删除SET1这个字符
-s 替换SET1这个字符
col [-xb]
-b:过滤掉所有的控制字符,包括RLF和HRLF;
-f:滤掉RLF字符,但允许将HRLF字符呈现出来;
-x:以多个空格字符来表示Tab字符;
-l<缓冲区列数>:预设的内存缓冲区有128列,用户可以自行指定缓冲区的大小。
join [-ti12] file1 file2
-t<字符>:使用栏位的分割字符;
-v<1或2>:更-a相同,但是只显示文件中没有相同栏位的行;
-1<栏位>:连接[文件1]指定的栏位;
-2<栏位>:连接[文件2]指定的栏位。
paste [-d] file1 file2
将两行贴在一起
-d:后面接分隔符,默认以[tab]来分隔
- : 如果file部分写成 - ,表示来自standard input的数据
expend [-t] file
将tab键替换成空格
-t:后面接数字表示替换成多少位空格
split
split [-bl] file PREFIX
-b:后接大小,单位b、k、m等
-l:后接数字,以行数来切割
PREFIX:切割完文件的文件名以PREFIX开头
bash的环境配置文件
/etc/profile
~/.bash_profile or ~/.bash_login or ~/.profile
source 读取配置文件命令
sed
管道命令,可以分析standard input
sed
awk
数据处理工具
awk命令详解
printf
格式化打印
参考:Shell printf命令