shell
1、bash 的基本特性:
CTRL + l
上建
history
2、io重定向与管道符
3、 编程基础
编程原理
程序就是执行某个功能的一段代码而已
shall执行:全路径 ,命令, ./
变量是一段命名的内存空间
程序 = 指令 +数据(变量)+逻辑关系
4、grep 和正则表达式!!!!!
linux三剑客
pattern模式
5、语句的逻辑关系
if
for 放入for循环的列表
while 循环条件为true
until 循环条件为false(不要进入死循环)
case · 编写Linux的程序启动脚本
break
continue(跳出当前循环)
exit
read input()
echo· print()
变量
Linux三剑客
sed 流设备(文本编辑)
两种模式的切换
awk(报告生成器)
独立的编程语言
函数
一段固定功能的代码块
数组
列表、元组、字典
字符串
字符串的处理
先排序在去重(重复:必须连续且相同的数据)
---------------------------------------------------------------
一、 bash的基本特性
1、命令历史
作用:查看之前使用的命令
历史记录history
关于命令历史的文件
每个用户家目录下面的.bash_history
在关机时,会自动写入一次(history -r 将内存中的命令历史写入文件)
关于命令历史的变量(环境变量)
env //查看环境变量
set //查看更详细的环境变量参数
HISTSIZE = 1000 数量
HISTCONTROL = ignoreboth 两者都生效
history的常见操作
查看命令历史
!# #表示数值,执行#行的命令
!!上一条命令
!string 匹配最近一次的字符串
!$ 上一条命令的最后的内容
(esc + .)
常见选项:
-a
-d
-c
history #(数值) 显示最近#行的命令
2、命令补全
tab
提示和自动补全的作用
制表符 四个空格
3、目录补全
4、命令展开
系统时钟:date
硬件时钟:clock、hwclock(如何同步系统时钟与硬件时钟)
cal 日历
-j 显示当日是当年中的第几天
Linux的目录需要遵循FHS目录规则
基于date命令创建目录
date +%F 显示年月日
-%H 小时
-%M 分钟
-%S 秒
-%T 显示时间
tar 压缩工具
【压缩只能对文件进行操作,而不能压缩目录】
gzip
bzip2
xz
zcat \ 查看压缩文件且不解压
tar的常见参数:
tar归档工具【可以对目录进行操作】
-j bzip2
-J xz
-z gip
-c create
-x extract \可以不用指定解压工具
-f 指定文件名
-v 显示详细信息 verbose
-t 不解压查看内容
tar cjvf 2018-08.http.log.bz2 2018-08-*.http.log
tar xvf 2018-08.http.log.bz2 -C abc
5 、命令的执行
在Linux中, 每一条命令执行后都会有两个结果:
命令本身放回的内容
命令执行的结果状态
$? 变量,就是用来存放命令执行状态的变量;
0 表示成功状态
1-255 表示失败状态
6、 命令快捷键
CTRL + l 清屏
CTRL + c 退出
CTRL + u 删除光标前字符
CTRL + k 删除光标后字符
CTRL + a 光标跳到行首
CTRL + e 光标跳到行尾
CTRL + w 以空格为分隔符,删除文件
CTRL + r 进入一个交互式页面,搜索最近一次使用的命令(要输入string)
7、alias别名
系统启动时读取一些特殊文件的顺序
/etc/profile 定义环境变量(所有用户) --EXPORT HISTCONTROL=XXX
/etc/bashrc 定义本地变量----alias(所有用户)
~/.bash_profile 定义环境变量(指定用户)
~/.bashrc 定义本地变量---alias(指定用户)
source /etc/profile 或者 ./etc/profile
8、文件通配符
【文件通配符不是正则表达式】
? 任意单个字符
* 任意长度, 任意字符
[ ] 指定范围内的任意一个字符
^
【^】指定范围以外的任意一个字符
【^0-9A-Za-z】
指定字符类:
[:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:],
[:upper:], and [:xdigit:].
-------------------------------------------------------------------------------------------------------------
重定向和管道符:
1、重定向
在程序中,数据是如何输入的 ?又如何输出?
数据输入:键盘--标准输入,但并不是唯一方式
数据输出:显示器--标准输出并不是唯一方式
fd文件标识符 0-9 ---相当于给文件分类;
被定义的 0 1 2
0-----标准输入
1-----标准输出
2-----标准错误
常见重定向符号:
1、标准输出
> 覆盖重定向、非常危险(容易没数据)
set - C 关闭覆盖重定向
>> 追加重定向 不覆盖
>| 强制重定向
2、标准输入
< a < b tr 替换文件内容
tr set1 【set2】< file.txt
<< 将多行数据同时输入
cat >>a.txt<<EOF
>1
>2
>3
>EOF
3、错误输出
2>
2>>
&> &>>
2 管道 - tee
前一个命令的执行结果交给后一个命令来执行
tee 一路输入,两路输出
tee/tmp/tee/out
如果没有文件,会创建,默认如果文件存在有内容,会覆盖
find [范围] -name ab* -type f -perm 600 -mtime +7|xargs rm -rf
3、 文本处理工具 -wc,cut,sort,uniq
wc
word count 统计文本文件中的字符个数
用法:wc filename
行数、字符个数、文件大小、文件名
-l -w -c
cut
用来做文件分割
默认使用'空格'做分割符
-d 指定分割符(delimiter)
-f 指定提取哪一列
-f1、
-f1,3、
-f1-3
--output-delimiter=’‘将输出的分隔符替换为想替换的
【cut的局限性:1、-d 指定分隔符不能同时指定多个 2、不能做出高级的格式化输出】
sort
排序命令(按ascⅡ排序)
默认查看第一个字符(包括数字、字母、空格、特殊符号)
-r 逆序
-n 指定以数值大小进行排序
-f 忽略字符的大小写
-u uniq排序去除重复,重复的不显示
-t delimiter指定分隔符
-k 已制定字段的第几段进行排序
uniq
连续且相同的命令,才被视为重复
建议先排序在去重
-c 显示每一行重复了多少,统计出来
-d 仅仅显示重复的行