0525 第八节课
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0525 第八节课相关的知识,希望对你有一定的参考价值。
一.脚本编程基础
1.脚本是命令的堆积,但是要考虑命令结果的不等次幂
2.脚本开头必须是shebang,即#!/bin/bash,#!必须顶格,后 面跟shell
3.行首加上#时既不会显示出来也不会运行,因此在写一些描述版本等信息的时候前边要加上#,调试脚本时不想执行某一命令前边也可以叫上#
4.空白行默认是不显示的,想要显示空白可以echo “ ”来表达
5.shell脚本是开启一个子shell运行的
6.shell运行有两种方式
a.给脚本以x执行权限
b.前边加上脚本的解释器,即加上shebang后边的shell,如bash *.sh
7.脚本的执行分为:顺序执行,循环执行,选择执行
8.脚本开头
script
#!/bin/bash 顶格
#author: 作者
#version: 版本(直接以2.0开头)
#description: 描述脚本的作用
9.bash -n 检查脚本的内容有没有语法错误
-x 调试运行,并不真正运行,只是模拟运行,不会对目标做任何处理,会将过程结果输出到屏幕
10.开机运行的脚本一般放在/etc/profile.d目录下
二.变量
1.本地变量
本地变脸只对当前shell有效,且在没有写入到配置文件的本地变量将会在shell关闭后失效,配置文件是/etc/bashrc(全局) ~/.bashrc(个人)
本地变量的设置
name=“变量内容”(可以使命令等)
取消本地变量
unset name(不需要加$)
查看变量
set(包括了环境变量和函数)
变量的引用
echo ${}
2.环境变量
环境变量的作用对象是当前shell及其子shell,同本地shell,想要永久保存需要写到配置文件中配置文件是/etc/profile (全局) ~/.bash_profile
环境变量的设置
export name=“变量内容”
declare -x name=“变量内容”
name=“变量内容” export/declare -x name
环境变量的取消
unset name
查看环境变量
declare -x
export
env
引用同本地变量
3.只读变量
只读变量只能读取,不能删除,也不能取消,只有在退出shell的失效
只读变量的设置
declare -r name=“”
readonly name
4.位置变量
位置变量是想脚本内容传递参数的变量
jiaoben.sh s1 s2 s3
s1 s2 s3都成为jiaoben.sh位置变量
jiaoben.sh中想要引用可以用$1等引用这些参数
$1:脚本后边跟的第一个参数,在脚本中用$1来表示
$2: 二
. .
. .
. .
注意:$10并不是第10个参数,而是第一个参数加0,第10个参数要用到引用${10}
[email protected]:指的是后边的全部参数,并且每一个参数都是一个字符串
$*:值得是后边的全部参数,并且全部参数是一个字符串
$0:指的是命令本身,但是命令本身是会带路径的,所以,要用basename来取出基名,但是由于是命令所以要用到命令引用`basename $0`
$#:代指参数的个数
shift功能:在脚本中需要插入环境变量的上一行加上shift #,会让脚本后边跟的参数整体向左移动#位,默认是移动一位,即第二位及以
后的参数一起向左移动一位,覆盖住第一位参数,值得注意的是,是覆盖第一位参数,参数项会少一位,并且原先脚本中显示第一个参数
的$1的内容现在变成第二个参数,以此类推,并不是循环,第一位不会跑到最后一位,脚本中最后一位参数的$*的位置将会为空
三.运算
因为在shell中都被视为是字符串,所以,10+10是不会被运算的,运算需要用到特殊的格式
运算方式:+加 -减 *乘 %取余(取余是指取前边的数除后边的数的余数,显示的是余数而不是结果) **次幂
1.expr s1空格+空格s2
2.echo $[运算表达式]
3. s1=数值1
s2=数值2
s3=$s1 (+-*% **) $s2
echo $s3 | bc(计算器)
四.sed文本编辑器
sed工作方式:sed是一行一行处理文本的
保持空间
file的某一行---------- -----------输出
模式空间
格式
sed [options] ‘script’ file file.bak文件后边加上.bak可以先制作一个文件的备份
options
-i:对文本进行编辑,默认的是不会对原文本有任何更改的,在加了i后所做的一次修改都会被作用到源文件上
-f:-f/PATH/TO/FILE,可以讲处理的动作命令等写入脚本中,每次从脚本中读取,更利于多文本处理
-n:不会输出到屏幕,默认的是将处理过的没处理过的都输出到屏幕上
-e:多点编辑,例如 -e ‘script’ -e ‘script’
-r:支持正则表达式
’script‘
’地址命令‘
a.地址
#:第几行
#1,#2:范围,第#1行到第#2行
#,#+n:从第#行到第#+n行,n是表示偏移量
/par1/,/par2/:从正则表达式匹配到的第1行到正则表达式匹配到的第2行
#,/par/:。。。。。。。。。。
b.命令
d:删除行
p:将修改成工的内容输出到屏幕,不加n的话会有两行一模一样的,因此通常和-n连用
=:显示行号
#a\xxxx:在第#行的后面另起一行,内容时XXx
#i\xxxx:在第#行的前面另起一行,内容时xxx #可以是正则表达式,但是正则表达式必须用/par/括起来
#c\xxxx:将第#行的内容替换为xxxx
w /PATH/TO/FILE 另存为的意思
r /PATH/TO/FILE 将另一文件的内容读取进来
c.查找替换
基本等同于vim中的查找替换
’s/查找内容/替换内容/g‘
同样支持正则表达式,但是前面必须加上-r
g:全部替换,同vim一样,不加g的话一行中有多个查找内容只会替换第一个
p:显示成功行,其实和上面那个p就是同一个p
w /PATH/TO/FILE 另存为
sed的高级编辑
-h:将模式空间的内容覆盖到保持空间
-H:将模式空间的内容追加到保持空间
-g:将保持空间的内容覆盖到模式空间
-G:将保持空间的内容追加到模式空间
-x:将保持空间的内容与模式空间的内容呼唤
-n:将读取文件的当前行的下一行也一并读取出来覆盖到模式空间
-N:将读取文件的当前行的下一行也一并读取出来追加到模式空间
-d:删除一行
-D:删除多行
格式: sed ‘1!N;$!D‘ file
注意:分号是命令按次序执行的意思,而这段命令在思考是要注意sed是一行一行处理文件的,所以并不是将除了第一行以外的我全部取出
而是“首先取出1行,看是不是第一行,是则直接送去$!D命令,不是,则执行-N命令将其下一行一同取出追加到这行后边,然后将这两行送
去执行$!D命令,到了后边,看是不是最后一行,不是,直接删除,是,则保留在当前空间“,因此结果会是文件的最后一行和倒数第二行数
据
五.find与locate
locate:在数据库中查找,locate会建立一个数据库,里边包含着硬盘的所有文件的名字路径等等信息,locate在搜索的时候,并不是搜索
硬盘,而是去搜索数据库/var/lib/mlocate/locate.db
locate特性:速度快,不具备实时性,模糊搜索(会将路径中包含字符的文件都找出来)
有时候可能需要用户手动创建这个数据库的情况
更新locate数据库:updatedb,更新数据库是需要读取硬盘上的每一个文件,对于资源的消耗很大,因此手动更新的时候请选择一个闲时
自动在闲时更新
-i:不区分大小写
-b:只显示基名不显示路径中包含字符串的内容
-r:支持正则表达式
-c:不显示具体文件只显示数量
-n #:只显示前#个文件
find:在整个硬盘中搜索文件,具备实时性,但是消耗资源大,速度相较于locate要慢
格式
find 要搜索的位置 选项 处理动作
要搜索的位置
选项: -name “名字” :根据名字查找,是精确查找,但是支持通配符
-iname “ ” :不区分大小写的-name
-regax name “ ” :支持正则表达的名字查找,但是会将路径中包含的也一同线束出来
-user
-group :查找用户或组,支持UID和GID
-uid
-gid :用uid gid查找,只支持uid gid
-nouser
-nogroup :查找无组或者无主的文件
-type :按类型查找
f普通文件 d目录 l连接文件 c字符文件 b块文件 p管道文件 s字符套接文件
-a:并且的关系
-o:或的关系
!/-not:非的关系
-size[+—]#:按大小查找
# (#-1,#]
-# [0,#-1]
+# (#,oo)
-atime #天
-ctime
-mtime
-amin #分钟
-cmin
-mmin
# [#,#+1):#=7 在离现在起整7天的那天起的24个小时之内 0526 9:59 0518 9:59到0519 9.59之间
-# [0,#) :从现在0526 9.59起到0519 9.59之间的时间
+# (#,00]::0519 9.59以前修改过的文件
-perm xxx:精确指定xxx权限的文件
/xxx:三类用户的9个权限中有一个符合条件,就是符合条件的文件
-xxx:三类用户的权限都同时符合条件的,才是符合条件的文件
注意:/xxx -xxx这两者的关系,非-xxx与/xxx互为半否命题
处理动作
-print:输出到屏幕,默认的处理动作
-ls :对查到的文件执行ll命令
-fls :对执行了ll名的查到的文件的列表另存为
-ok COMMAND {} \; 最查到的文件执行命令,交互模式
-exec COMMAND {} \; 对查到的文件执行命令,不会要求你确认
注意:通常用find查到的文件有数十个甚至上千个上万个,但是-ok -exec都是讲文件作为参数全部由命令执行,而
很多命令并不支持一次性处理那么多的参数,因此很多时候回报错,这时候可以使用xagrs
find | xagrs COMMAND
xagrs会将find查到的文件一个一个交个命令来处理
六.配置文件
配置文件大致分为两类
profile类:1.配置环境变量 2.开机运行的一些命令脚本
bashrc类: 1.配置变量 2.配置命令别名
用户登录又分为
交互式登录: 1.su - name切换 2.任何终端登录
分交互式登录: 1.图形界面下的终端 2.su name切换 3.执行脚本开启的shell
交互式登录的配置文件读取顺序:/etc/profile----->/etc/profile.d/------->~/.bash_profile----->~/.bashrc------>/etc/bashrc
非交互时登录配置文件读取顺序:~/.bashrc------>/etc/bashrc-------->/etc/profile.d/
因此bashrc类的配置文件,无论是交互式还是非交互式登录都要读取(/etc/profile.d/*.sh也是,所以一些需要开机运行的脚本都放在这个目录中)
退出时要读取的配置文件是:~/.bash_logout
本文出自 “博客作业初版” 博客,谢绝转载!
以上是关于0525 第八节课的主要内容,如果未能解决你的问题,请参考以下文章