脚本定义
Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的`。
更明白地来说,shell script就像早期dos年代的bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。
shell和shell脚本有什么区别?确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。
#1.创建脚本
1)
vim haha.sh
一般情况下脚本一.sh结尾,这不是系统规定的,而是一种业界规范
2)
#!/bin/bash
脚本头的写法,这是脚本使用的解释器,也就是默认脚本运行时开启的子shell
3)
脚本内容是用明令和明令执行的逻辑关系组成
4).shell的三中执行方式
1.sh
sh /mnt/test.sh
调用命令不使用shell里的幻数
2./mnt/test.sh
直接使用shell里的幻数执行
提前要给shell脚本加可执行权限
chmod +x /mnt/test
3.source
source /mnt/test.sh
直接使用当前环境执行
#2.vim调用
1.手动调用
vim /etc/vimrc
65 map <F5> ms:call WESTOS()<cr>'s
66 function WESTOS()
67 call append(0,"################################")
68 call append(1,"# Author: overman #")
69 call append(2,"# Create_Date:".strftime("%Y-%m-%d %H:%M").":#")
70 call append(3,"################################")
71 endfunction
测试:
vim test
当我们按是会自动调用WESTOS()里的内容
2.自动调用
vim /etc/vimrc
66 autocmd BufNewFile .sh,.script exec “:call WESTOS()”
67 function WESTOS()
68 call append(0,"################################")
69 call append(1,"# Author: overman #")
70 call append(2,"# Create_Date:".strftime("%Y-%m-%d %H:%M").":#")
71 call append(3,"################################")
72 endfunction
测试:
vim test.sh
当我们创建以.sh或者.script结尾的的文件会自动调用WESTOS()里的内容
#3.diff
1.diff在比较文件过程中结果读取方式
[num1,num2][a|c|d][num3,num4]
num1,num2表示在第一个文件的行数
a表示添加----add
c表示更改----change
d表示删除----delete
< 表示第一个文件内容,> 表示第二个文件内容,—分割线 numb3,num4表示在第二个文件中的行数
2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配到第二个文件的第二行和第四行
2.diff在比较目录过程中结果的读取
Only in directroy/:filename
directory ## 表示在那个目录中
filename ##表示在这个目录
3.diff中常用的参数
-b或--ignore-space-change ##不检查空格字符的不同
-B或--ignore-blank-lines ##不检查空白行
-c ##显示全部内文,并标出不同之处
-i或--ignore-case ##不检查大小写的不同
-p ##若比较的文件为c语言的程序码文件是,显示差异所在的函数名称
-q或--brief ##仅显示有无差异,不显示详细信息
-r或--recursive ##比较子目录中的文件
-u ##以和并的方式来显示文件内容的不同
##补丁
yum install patch -y
diff -u test test1 > test.path ##比较文件生成test.path补丁
patch test test.path ##将补丁打入test原文件
4.cut
cut命令多用于字符截取
cut -d ##指定分隔符
cut -f 1,7|1-7 ##指定截取的列
cut -c 1,4|1-4 ##指定截取字符位置
5.sort
sort命令多用于字符排序
sort -n ##纯数字排
sort -r ##倒序
sort -u ##去掉重复数字
sort -o ##输出到指定文件中
sort -t ##指定分隔符
sort -k ##指定要排序的列
6.uniq
unip命令用于对重复字符座相应的处理
uniq -u ##显示唯一的行
uniq -d ##显示重复的行
uniq -c ##每行显示一次并统计重复次数
7.test
test "$a" == "$b" 等同于 [ "$a" == "$b" ]
[ "$a" = "$b" ] ##等于
[ "$a" != "$b" ] ##不等于
[ "$a" -eq "$b" ] ##等于
[ "$a" -ne "$b" ] ##不等于
[ "$a" -le "$b" ] ##小于等于
[ "$a" -ge "$b" ] ##大于等于
[ "$a" -gt "$b" ] ##大于
[ "$a" -lt "$b" ] ##小于
[ "$a" -ne "$b" -a "$a" -ge "$b" ] ##-a必须条件都满足
[ "$a" -ne "$b" -o "$a" -ge "$b" ] ##至少条件满足一个
[ "file1" -ef "file2" ] ##是否为同以个文件
[ "file1" -nt "file2" ] ##文件1是否比文件2新
[ "file1" -ot "file2" ] ##文件1是否比文件2老
[ -z "$1" ] ##是否为空
[ -e "file" ] ##是否存在
[ -f "file" ] ##普通文件
[ -b "file" ] ##块设备
[ -S "file" ] ##套接字
[ -c "file" ] ##字符设备
[ -L "file" ] ##软连接