一道残阳铺水中,半江瑟瑟半江红。
Bash
环境变量与自定义变量
env
查看环境变量,set
查看所有变量。两者的区别关键在于是否会被子进程所继续引用,可以使用export将自定义变量转化为环境变量。可以把这两个理解为global变量和local变量。这里注意子进程与父进程的关系。
declare
和typeset
用于声明变量,在iie工作记录中的脚本中我用到了bash数组,BashNote(3)中也用详细的总结,这里说说declare的另外几个功能。-i
声明整形变量,-x
等价于export
的功能,导出环境变量,-r
将变量设置为只读。
使用source
或者小数点
直接读取配置文件不需要注销再登录。
自定义变量的设置,参考BashNote(1)
历史命令
history
是一个很简单的命令。!!
执行上一条命令。HISTSIZE
环境变量设置保存多少条历史,默认历史命令在注销后保存至~/.bash_history
。
bash配置文件
/etc/profile
所有用户都会执行。/etc/profile.d/*.sh
最好自定义的内容在这里面修改,只要用户具有读权限,该文件就会被调用。~/.bash_profile
个人配置文件,如果该文件不存在就回去读取.bash_login
,如果还不存在就读取~/.profile
。
命令
参考《鸟哥的linux私房菜》,这里需要掌握的命令有:选取命令cut
、grep
,排序命令sort
、wc
、uniq
、shuf
,双向重定向tee
,字符转换tr
、col
、join
、paste
、expand
,参数代换xargs
。
常用参数
cut
参考:BashNote(3)
sort
shuf
可以混洗输出。-f
: 忽略大小写-b
: 忽略行首空格-M
: 以月份进行排序-n
: 使用纯数字进行排序-r
: 反向输出-u
: uniq-t
: 分隔符-k
: 指定区间作为排序键
uniq
-i
: 忽略大小写-c
: 进行计数
tee
-a
: 追加写
tr
可以认为是缩水版本的sed。
参考:BashNote(2)
join
需要预先将文件排序。-i
: 忽略大小写-1
: 第一个文件的键所在字段, 从1开始-2
: 第二个文件的键所在字段
paste
类似于join,不过是以行号作为键
expand
将制表符转化为空格。另外unexpand
可以做到相反的事情、-t
: 一个tab转化为几个空格。
xargs
将换行符、tab或者空格替换为参数格式。
使用实例:
不定个数空格分割的字段的处理,使用tr
。
1 | echo -e "asd asd asd asd\tasd\nasd asd" | tr -s " " |
按照数字键进行排序,使用sort
。一定要有-n。
1 | cat /etc/passwd | sort -t ':' -k 3 -n |
将历史命令按照使用频率排序,只输出十次以上的命令。uniq之前一定要先sort,因为uniq仅仅只处理连续的重复行。-E
使得括号大括号等具有特殊含义,具体内容使用man手册。
1 | history | cut -d " " -f 4 | sort | uniq -c | sort -n | grep -E "^[[:space:]]*[[:digit:]]{2,}" |
文本处理三剑客
常用参数
grep
-a
: 以文本方式处理二进制文件-c
: 匹配的行数-i
: 忽略大小写-n
: 输出行号-v
: 反向选择-A
: 顺便输出前n行-B
: 顺便输出后n行
sed
参数:-n
: 只有被处理行进行输出-e
: 命令行模式-f
: sed脚本-r
: 使用扩展正则表达式-i
: 直接在原文件修改
操作:a
: 当前的下一行插入i
: 当前的上一行插入c
: 行替换,将指定行替换为新的内容d
: 删除p
: 打印(通常需要-n)s
: 正则替换
扩展:
三十分钟学会 sed
SED 与 AWK 笔记
Linux/Unix工具与正则表达式的POSIX规范
awk
相比sed擅长证行进行处理,awk擅长将一行拆分为字段。
参考
《鸟哥的Linux私房菜——基础篇》