Shell脚本
hell程序在学校都是单行命令的形式来执行
缺乏逻辑关系
根据shell脚本的不同,传入的参数不同
Seq 自动生成1到100个数
sum=0
for i in $(seq100);do
done
echo#输出
awk—printf#格式化输出
区别:使用shell来实现Linux的批量管理,而不是去开发应用程序;
shell (python、perl)
pip install ipython
ipython是交互系统
IPython 是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数。
1、 bash的基本特性
ctrl +l
上键
history
2、 IO重定向与管道符
3、 编程基础
编程原理
程序:执行某个功能的一段代码而已
程序:必须包含指令(由命令发出)和数据(一段命名的内存空间,数据由变量提供)和(逻辑关系)
4、 grep和正则表达式
pattern”模式”
grep用来过滤
1、语句的逻辑关系
1)if
2)循环
重点:for 放入for循环的列表--------------好处:不容易进入死循环
While 指定初始值,循环条件为true进入循环
Until 循环条件为false进入循环,注意不要进入死循环
Case 编写Linux程序的启动脚本
3)打断循环
Break 跳出所有循环
Continue 跳出当前循环
4)Exit退出当前程序
5)读写
Read—input
Echo—print()
*变量*
Linux三剑客
Sed stream edit d? 流编辑器 用来做文本编辑
两种模式的切换
内存模式
Awk报告生成器
他就是一个独立的编程语言
1、数值型2、字符型
函数:
一段固定功能的代码块
数组
列表、元组、字典
字符串
字符串的处理
重复:必须连续且相同的数据;先排序再统计(再去重)
1、 联系:
判断/etc/inittab文件是否大于100行,如果大于,则显示”/tec/inittab is a big file”
Line=`wc –l /etc/inittab|cut –d’ ’ –f1`
If test $Line –gt 100;then
#if[$line –gt 100];then
echo” /tec/inittab is a big file”
else
echo “/tec/inittab is a small file”
fi#结束语句
1、 bash的基本特征
2、 命令历史
作用:查之前使用的命令
关于命令历史的文件
每个用户家目录下面的.bash_history
在关机的时候,会自动写入一次
关于命令历史的变量(环境变量)
snv //查看环境变量
set //常看更详细的环境变量参数
HISTSIZE=1000 记录1000个历史数量
HISTCONTROL=ignoredups
Ignoredups 忽略重复的历史命令---连续且相同,才叫重复
Ignorespace忽略空白开头的历史命令,”键入空格开头则不会被记录”
Ignoreboth 两者都生效
HISTFILE=/root/.bash_history
HISTSIZE=1000
History的常见操作
查看命令历史
!# #表示数值,执行#行的命令
!string 匹配最近一次的字符串
!!上一条命令
很重要:!$调用上一条命令的最后一个参数
ls /etc
ls !$= ESC+.
常见的选项:
-a
-d
-c
History#显示最近#行的命令
3、 命令补全
Tab 扩展:制表符 代表四个空格键
作用:1、提示
2、自动补全
4、 目录补全
Tab 1、提示
2、自动补全
5、 命令展开---date命令
{,}逗号做分隔符
Mkdir –pv mylinux{bin,boot/grub}
命令行扩展:
Linux的目录需要遵循什么规则?-------FHS目录规则(文件系统层次化
Date 基于date命令来创建目录
斜杠不可以做文件和目录名,因为斜杠有特殊意义
%F CCYY-mm-dd 年月日 当天日期
%H hh 时
%M MM 分
%S ss 秒
%T hh:mm:ss
%D mm/dd/YY
%Y CCYY
改变date的输出时间的方式
输出年月日和时分秒
%M是分钟 %m是月
练习:通过for语句循环创建一个月的日志文件;.log 2019-08-6.http.log
touch`date+%F`.http.log
for i in {1..30};do
touch `date+%Y-%m-$i`.http.log
done
在一行写命令一定要用;分号分隔开
执行周期命令两个:crontab
Tar 归档(压缩与解压缩)
tar归档可以对目录进行操作
-j bzip2
-J xz
-z gzip
-c create 创建压缩
-x extract解压//可以不用指定解压的工具
-f 指定文件名
-v 显示详细信息verbose
-t 不解压查看内容和zcat一样
例如:tar cjvf 2019-08.http.log.bz2 2019-08-*.http.log *文件通配符
解压:Tar xvf 2019-08.http.log.bz2 –C abc
压缩特性:只能对文件进行操作,不能对目录进行操作directory
24234fjeonero24234f
24234=ax
压缩工具:gzip 、bzip2、 xz、zcat//查看压缩文件且不解压
练习:编写脚本,每天02:20备份/etc/目录中所有文件,名称为当天日期;且保存文件为压缩文件;
Crontab –e --20 2***/root/xxx.sh
Vim xxx.sh
#!/bin/bash
#
Tar cJvf /var/ `date +%F`.xz /etc/
Chmod +x xxx.sh
补充:
clock/ hwclock查看硬件时钟(如何同步系统时钟与硬件时钟)查看以哪个为准
cal 日历
cal 1998就可以查看1998年的日历
1、 命令的执行状态
在Linux中,每一条命令执行后都会有两个结果:
命令本身放回的内容
其次,命令执行的结果状态
$? 变量,就是用来存放命令执行状态的变量;
0 表示成功状态(和python正好相反)
1-255 表示失败状态
[$! –eq 0] && exit 0 || exit 1
命令的执行结果状态:
常见错误状态值:
127—命令找不到
2—文件或目录不存在
13—没有权限
7、命令的快捷键
Ctrl+l
Ctrl+c结束进程
Ctrl+u删除光标前的字符
Ctrl+k删除光标后的字符
Ctrl+la跳到光标头
Ctrl+e跳到光标尾
Ctrl+w以空格为分隔符,去删除文件
Ctrl+r进入交互式界面,搜索最近一次使用的命令(要输入字符串string)
8、 alias别名
系统启动时读取一些特殊文件的顺序;
alias cdnet=”cd /etc/sysconfig/network-scriptes”//只能在当前shell生效
文件:
/etc/profile : 定义环境变量(所有用户) 大写----------export histcontrol=xxx
/etc/bashrc : 定义本地变量----alias (所有用户) 小写
~/etc/.bash_profile 定义环境变量(指定用户)
~/.bashrc 定义本地变量----alias (指定用户
sources /etc/profile 或者 ./etc/profile
8、 文件通配符-----------globbing
【文件通配符不是正则表达式】
五种常见字符类:
?任意单个字符 A?b Abb ab错误
*任意长度任意字符
[ ] 指定范围内的任意一个字符
[0-9A-Za-z]
[0-9] [a-z] [A-Z]
全部字符: [a-zA-Z]
^ [^]指定范围以外的任意一个字符
指定字符类:
[:alnum],[:alpha],[:cntrl],:数字[:digit:] ,
标点:[:punct:],[:graph:],[:lower:],[:print:],[::]
空格键的空格^[[:aprce:]]*$