linux中的shell

shell脚本
脚本:能够运行的文本

1.什么是shell(解释性语言)
shell时操作系统的一个软件
它包括在linux内核的外部,为用户和内核之间的交互提供了一个接口
系统中的命令用shell去解释shell接受系统回应的输出并显示其到屏幕中
bash = GNU Bourne Again Shell

2.什么是shell脚本
脚本是一种解释性语言
用shell脚本保存执行动作
用脚本判定

3.脚本启动方式

ctrl+z 把程序打入后台
fg将后台软件调入前台

sh调用:用sh作为解释器和设定的脚本解释器无关

vim /mnt/test.sh
  #!/bin/bash		##脚本解释器(幻数),代码运行环境
  watch -n 1 date

(1)sh + 脚本名称
在这里插入图片描述
(2)脚本名称的绝对路径(需要添加执行权限)
在这里插入图片描述
(3)source + 脚本名称
source:用当前的shell作为解释器,不会开启新的shell
在这里插入图片描述
4.注释
(1)使用快捷键的方式为每次编辑脚本文件时,为其添加注释。

vim /etc/vimrc 
 67 map <F5> ms:call WESTOS()
 68 function WESTOS()
 69         call append(0,"#############################")
 70         call append(1,"# Autho:                    #")
 71         call append(2,"# Create-Date: ".strftime("%Y-%m-%d")."   #")
 72         call append(3,"# Version:  1314            #")
 73         call append(4,"# Mail: yc@163.com          #")
 74         call append(5,"# Description:              #")
 76         call append(6,"#                           #")
 77         call append(7,"#############################")
 78 endfunction

在这里插入图片描述
(2)编辑特定的文件时,为其自动添加注释

vim /etc/vimrc 
 68 autocmd BufNewFile *.sh exec ":call WESTOS()"
 69 function WESTOS()
 70         call append(0,"#############################")
 71         call append(1,"# Autho:                    #")
 72         call append(2,"# Create-Date: ".strftime("%Y-%m-%d")."       #")
 73         call append(3,"# Version:  1314            #")
 74         call append(4,"# Mail: yc@163.com          #")
 75         call append(5,"# Description:              #")
 76         call append(6,"#                           #")
 77         call append(7,"#############################")
 78 endfunction

在这里插入图片描述
5.shell中的文本生成器

(1)diff(检测)中常用的参数
-b 不检查空格字符的不同
-B 不检查空白行
-c 显示全文内容,并标出不同之处
-c+数字 显示不同之处和其前几行和后几行
-i 不检查大小写的不同
-p 若比较的文件为c语言的程序码文件时,显示差异所在的函数名称
-q 仅显示有无差异,不显示详细的信息
-r 比较子目录的文件
-u 以合并的方式来显示文件内容的不同

diff test test1

(2)patch
yum install patch -y
diff -u test test1 > test.path ##生成补丁
patch test test.path ##为test打补丁
patch -b test test.path ##打补丁时,备份源文件

(3)字符截取
cut -d 指定分隔符
cut -f 1,7|1-7 指定截取的列
cut -c 1,4|1-4 指定截取的字符位置

(4)字符排序
sort -n 纯数字排序
sort -r 倒序
sort -u 去掉重复数字
sort -o 输出到指定文件中
sort -t 指定分隔符
sort -k 指定要排序的列

(5)uniq
对重复字符做相应的处理
uniq -u 显示唯一的行
uniq -d 显示重复的行
uniq -c 每行显示一次并统计重复次数
sort westos
sort -n westos
sort -rn westos
sort -run westos
sort -n westos | uniq -c
sort -n westos | uniq -d
sort -n westos | uniq -u

sort -t : -k 2 westos
sort -t : -k 2 -n westos

(6)&&和||
&&用来执行条件成立后执行的命令
||用来执行条件不成立执行的命令

ping -c1 -w1 172.25.254.111 &&echo yes ||echo no
ping -c1 -w1 172.25.254.111 &> /dev/null &&echo yes ||echo no
test命令
test命令和[]命令等同
test “A"=="A"=="A"=="B” 等同 [“A"=="A"=="A"=="B”]
[ “A"="A" = "A"="B” ]
[ “A"!="A" != "A"!="B” ]
[ ! “A"="A" = "A"="B” ]
[ “A"−eq"A" -eq "A"eq"B” ] 等于
[ “A"−ne"A" -ne "A"ne"B” ] 不等于
[ “A"−le"A" -le "A"le"B” ] 小于等于
[ “A"−lt"A" -lt "A"lt"B” ] 小于
[ “A"−gt"A" -gt "A"gt"B” ] 大于
[ “A"−ge"A" -ge "A"ge"B” ] 大于等于

-z为空
-n非空

[ “westos” -ef “westos1” ] ##判断文件是否相同
[ “westos” -nt “westos1” ] ##判断前文件是否比后文件新
[ “westos” -ot “westos1” ] ###判断前文件是否比后文件旧
文件id—>inode
ln链接
文件内容被系统记录的次数

[ -e “file” ] ##判断是否存在
[ -f “file” ] ##判断是否为文本文件
[ -L “file” ] ##判断是否为链接
[ -S “file” ] ##判断是否为套接字
[ -b “file” ] ##判断是否为块设备
[ -d “file” ] ##判断是否为目录
[ -c “file” ] ##判断是否为字符设备
1 #!/bin/bash
2 [ -z “$1” ] &&echo Please give me a filename || {
3 [ -e “$1” ] || echo not exist
4 [ -f “$1” ] && echo it is a file
5 [ -L “$1” ] && echo it is a link
6 [ -S “$1” ] && echo it is a socket
7 [ -b “$1” ] && echo it is a block
8 [ -d “$1” ] && echo it is a directory
9 [ -c “$1” ] && echo it is a character device
10 }

1 df | grep /dev/vda1 > available
2 cut -d ’ ’ -f 18 available > a
3 b=82
4 [ “a"−ge"a" -ge "a"ge"b” ] && echo Warning || echo no

{}表示其中所有内容属于一个程序
()表示其中所有内容属于一个整体
[]表示test命令

(7)tr 大小写转换
vim westos
hello world
[root@shell mnt]# tr ‘a-z’ ‘A-Z’ < file
HELLO WORLD
[root@shell mnt]# tr ‘A-Z’ ‘a-z’ < file
hello world

6.shll中的正则表达式,报告生成器
(1)正则表达式
grep root passwd 找出passwd文件中包含root的行
grep -i root passwd 找出passwd文件中包含root的行并忽略大小写
grep “^root” passwd 找出passwd文件中以root开头的行
grep “root$” passwd 找出passwd文件中以root结尾的行
grep “<root” passwd 找出passwd文件中root无前缀的行
grep “root>” passwd 找出passwd文件中root无后缀的行
grep “<root>” passwd 找出passwd文件中root单独存在(无前缀,无后缀)的行
grep -E “root|ROOT” passwd 找出passwd文件中满足包含root或包含ROOT的行
grep -E “root&ROOT” passwd=egrep “root&ROOT” passwd
找出passwd文件中同时满足包含root和ROOT的行
grep “w…s” passwd 找出ws之间有两个字符的行
grep “w…” passwd 找出w后有三个字符的行
grep “…s” passwd 找出s之前有两个字符的行

|或,&与
|不属于标注正则表达式,属于扩展正则表达式
egrep和 grep -E 效果相同
-v表示反向

练习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值