8.6 bash介绍
区别:使用shell来实现Linux的批量管理,而不是开发应用
1、bash基本特性
ctrl + l
上键
history
2、IO重定向与管道符
3、编程基础
编程原理
程序:执行某个功能的一段代码
程序 = 指令(命令) + 数据(变量) + (逻辑关系)
4、grep和正则表达式!!!!!
linux三剑客
Pattern模式
-------------------------------------------
语句的逻辑关系
if
for * -- 放入for循环的列表
while --循环条件为true(不要进入死循环)
until --满足判断条件为false进入循环(不要进入死循环)
case --编写Linux的程序启动脚本
break
continue
exit (指定程序返回值)
read(输入)
echo(输出)
变量
-----------------------------------
linux三剑客
sed 流编辑器
两种模式的切换
awk 报告生成器
独立的编程语言
函数
一段固定功能的代码块
数组
列表、元组、字典
字符串
字符串的处理
(先排序再去重)重复:必须连续且相同的数据;
1.base的基本特性
命令历史
作用:查看之前使用的命令
关于命令历史的文件
每个用户家目录下的.bash_history
在关机的时候会自动写入一次(history -r 将内存中的命令历史写入文件)
关于命令历史的变量(环境变量)
env 查看环境变量
set 查看更详细的环境变量参数
ignoredups 忽略重复的历史命令
ignorespace 忽略空白开头的历史命令,键入空格开头则不会被记录
ignoreboth 两者都生效
history的常见操作
history 查看命令历史
!+ 编号
!string 匹配最近一次的字符串
!! 上一条命令
!$ 上一条命令的最后一个参数
ls /etc
ls !$
ESC +.
常见的选项:
-a
-d
-c
history # 显示最近#行的命令
命令补全
tab \t 制表符,代表4个空格
1、提示
2、自动补全
目录补全
tab
1、提示
2、自动补全
命令展开-date命令
{}
linux的目录需要遵守什么规则? --FHS目录规则
属性1 属性2
a 1
b 2
mkdir -pv /var/{a,b}-{1,2}
date
基于date命令创建目录
%F CCYY-mm-dd
$H 时hh
%m 月mm
%M 分MM
%S 秒ss
%T 显示时间的格式xx:xx:xx
%Y 年
%y 年的最后两个数字
练习:通过for语句循环创建一个月的日志文件; .log 2019-08-06.http.log
touch `date + %F`.http.log
at
crontab
tar 归档命令,可以对目录进行操作(压缩与解压缩)
[压缩只能对文件进行操作,而不能对目录进行操作]
gzip
bzip2
xz
zcat //查看压缩文件且不解压
tar的常见参数:
-z gzip
-j bzip2
-J xz
-c create(压缩)
-x extract(解压)//可以不用指定解压的工具
-f 指定文件名
-v verbose显示详细信息
vim xxx.sh
#!/bin/bash
#
tar cJvf /var/`date + %F`.xz /etc/
chmod + x xxx.sh
clock
/clock /hwclock 查看硬件时钟(如果同步系统时钟与硬件时钟)
cal 日历
hwclock
命令的执行状态
在linux中,每一条命令执行后都会有两个结果:
命令本身放回的内容
其次,命令执行的结果状态
$? 变量,就是用来存放命令执行状态的变量;
0表示成功状态
1-255表示失败状态
[$? -eq 0] && exit 0 ||exit 1
命令的快捷键
ctrl l
ctrl c
ctrl u //删除光标前的字符
ctrl k //删除光标后的字符
ctrl a
ctrl e
ctrl a
ctrl w //以空格为分隔符,去删除文件
ctrl r //进入一个交互界面,搜索最近一次使用的命令(要输入string)
alias别名
系统启动时读取一些特殊文件的顺序;
alias cdnet=“cd /etc/sysconfig/network-scripts” //这种方式定义alias只能在当前shell生效;
/etc/profile 定义环境变量(所有用户)
/etc/bashrc 定义本地变量--alias(所有用户)
~/.bash_profile 定义环境变量(指定用户)
~/.bashrc 定义本地变量--alias(指定用户)
sources /etc/profile 或者 ./etc/profile
文件通配符 --globbing
(文件通配符不是正则表达式)
? * [] ^
? 任意单个字符
* 任意长度的任意字符
[] 任意范围内的一个字符
^ 1.以什么开头 2.[^]指定范围以外的任意一个字符
指定字符类
[:alnum:]子母加数字
[:alpha:]
[:cntrl:],
[:digit:]数字
[:graph:]
[:lower:]
[:print:]
[:punct:]特殊字符
[:space:]空格 ^*[[:space:]]*$ //空白行
[:upper:]大写
[:xdigit:]