最常见的shell脚本Bash(Bourne Again Shell)是sh(Bourne Shell)的增强版,shell是用于让用户与操作系统kernel沟通的一个界面软件。
查看系统上可用的shell程序:
cat shells
命令 | 用法 | 示例 |
---|---|---|
history | 查询历史 | |
alias | 查询命令别名,设置命令别名 | alias *name* |
type | 查询命令是否为bash的内置命令 | type [-tpa] *name* |
echo | 打印变量 | echo $var |
unset | 重置变量 | unset var |
$n | 获取参数 | n=1时就为第一个参数 |
$? | 上一次的返回值 | |
set | 观察或定义环境变量 | 不含参数时打印当前环境变量和脚本,含有参数时定义某个环境变量 |
locale | 查看语言 | |
export | export后的变量可以被当前shell进程的子进程所使用 |
双引号与单引号:双引号可以保留变量的含义,单引号会将变量名变成字符串失去变量含义
反单引号:在反单引号之内的命令会被先执行,其结果将作为外部的输入信息
命令 | 用法 | 示例 |
---|---|---|
read | 读取来自键盘输入的变量 | read [-pt] *var* |
declare | 声明变量的类型(-a:array,-i:integer,-x:export为环境变量,-r:readonly) | declare [-aixr] *var* |
unlimit | 限制文件系统或程序 | unlimit [-SHacdfltu] [配额] |
${变量#替换文字} | 删除符合替换文字的最短环境变量 | |
${变量##替换文字} | 删除符合替换文字的最长环境变量 | |
source | 读入环境配置未见的命令 | source ~/.bashrc |
cut | 管道选取命令,把一段信息中的部分给切出来 | echo ${PATH} | cut -d ':' -f 3,5 |
grep | 管道选取命令,分析并取出有我们想要的信息的所有内容 | grep --color=auto ‘MANPATH’ /etc/man_db.conf |
sort | 排序命令 | sort [-fbMnrtuk] [文件或输入] |
wc | 统计多少字 -w 多少行 -l 多少字符-m | wc [-lwm] |
uniq | 排序后仅显示一个 | uniq [-ic] |
tee | 双向重定向 | tee [-a] file |
通配符/特殊符号 | 意义 |
---|---|
* | 代表0到无穷多个任意字符 |
? | 代表一个任意字符 |
[ ] | 代表一定有一个在括号内的字符,但不是任意字符,例如[abc]代表有abc种任意一个 |
[^] | 代表一定有个字符,但排除括号内字符 |
| | 管道,分割两个管道命令 |
$ | 使用变量前导符 |
& | 把当前任务变成后台任务,bg可以切换回来 |
>,>> | 数据流重定向,输出定向,分别是替换和累加 |
<,<< | 数据流重定向,输入定向 |
( ) | 括号内为子shell的开始与结束 |
字符转换命令
命令 | 用法 | 示例 |
---|---|---|
tr | 删除-d或替换-s一段文字 | tr [-ds] SET1 ... |
col | 把tab替换为空格 | col -x |
join | 若两个文件有相同数据行则加在一起 | join [-ti12] *file1* *file2* |
paste | 两个文件每行用tab分隔直接贴在一起 | paste -d *file1* *file2* |
expand | 把tab替换为空格 | expand [-t] *file* |
split | 大文件划分为小文件 | split [-bl] *file* PREFIX |
xargs | 参数代换 |
命令执行判断
cmd1 && cmd2
:cmd1执行结束且返回0(正确)开始执行cmd2,返回非0(错误)不执行cmd2.
cmd1 || cmd2
:cmd1执行结束,正确,不执行cmd2;错误,执行cmd2
多文件日志定位
find ./ -type f -name "*.log" |xargs grep "keyword"
确定行数
cat -n 01.log |grep "Login"
获取日志内容
cat -n 01.log |tail -n +45100 |head -n 100 //tail一般为了日志完整会选择行号减小一定值