描述性语言:C、Java,调用底层main函数
解释性语言:需要一个解释器翻译,shell
脚本和 C、Java 等描述性语言的区别
脚本是解释性语言(命令用解释器解释),运行效率低;开发过程较为简单;
C、Java等描述性语言是将动作描述给系统,运行速率较高;具有创造性,需要开发软件去编译,编译是一个将描述性语言翻译成机器可以读懂的语言过程;
shell
shell也是操作系统中的一个软件 它包在linux内核的外面,为用户和内核之间的交互提供了一个接口
系统中的命令用shell去解释shell接收系统回应的输出并显示其到屏幕中
bash = GNU Bourne - Again Shell
什么是shell脚本
脚本是一种解释性语言
用脚本判定命令的执行条件
用脚本来实现动作的批量执行
如何创建新的shell脚本
vim script.sh ##用vim编写脚本
#!/bin/bash ##脚本使用的解释器,通常用幻数“#!”指定
#Author ##脚本作者
#Date ##脚本创作时间
#Mail ##作者联系方式
#Version ##脚本的版本
执行脚本的方式
chmod +x file.sh
source file.sh
./file.sh 绝对路径
sh file.sh 直接执行
source 不会打开一个新的shell,使用当前运行环境
脚本的调试
vim script.sh ##shell脚本必须有x权限
sh -x scropt.sh ##使用于所有shell脚本
#!/bin/bash
运行环境(幻数)
没有执行权限时
掠过幻数
实验一:
将/etc/下以.conf结尾的文件备份到/mnt/backup下,并将其后缀文件名改为当天时间
菜鸟版本:
vim test.sh ##编辑脚本
sh test.sh ##运行脚本
ls /mnt/backup
进阶版本
实验二:
如何自动调用
vim /etc/vimrc
编辑map到endfunction的内容
编辑一个新的file.sh测试
按F5直接调用
当新建.sh 、.script结尾的文件时,自动调用
先注释掉67行手动添加,编辑68行
ButNewFile *.sh,*.script exec ":call WESTOS()"
diff命令
1.diff命令是用来比较两个文件或目录的不同
2.diff在比较文件过程中结果读取方式
[num1,nm2][a|c|d][num3,num4],
nmu1,num2表示在第一个文件中的行数,num3,num4表示第二个文件中的行数
diff中常用的参数
-b或--ignore-space-change 不检查空格字符的不同
-B或--ignore-blank-lines 不检查空白行
-c 显示全部内文,并标出不同之处
-i或--ignore-case 不检查大小写的不同
-p 若比较的文件为C语言的程序码文件时,显示差异所在的函数名称;
-q或--brief 仅显示有无差异,不显示详细的信息
-r或--recursive 比较子目录中的文件
-u 以合并的方式来显示文件内容的不同
diff命令的使用
[num1,num2][a | c | d][num3,num4]
num1,num2 表示在第一个文件中的行数;
a 表示 添加 ——add;
c 表示 更改 ——change;
d 表示 删除 ——delete;
< 表示 第一个文件中的内容
> 表示 第二个文件中的内容
num3,num4表示在第二个文件中的行数
打补丁
yum install patch -y
cat test ##test=hello
cat test1 ##test1=hello world
diff test test1 比较两个文件的不同
diff -u test test1 > test.path 把第一文件与第二个文件的不同生成补丁导入test.path
patch test test1.path 打补丁,使test与test1相同
注意:如果想要保留原文件内容,执行命令:
patch -b test test.path
生成.orig文件,即原来文件内容
cut命令多用与字符截取
cut -d 指定分隔符
cut -f 1,7|1-7 指定截取的列
cut -c 1,4|1-4 指定截取的字符位置
cut -d : -f 1 /etc/passwd 截取passwd的第一列(以:为分隔符)
cut -d : -f 1,7 /etc/passwd 截取passwd的第一列和第七列
cut -d : -f 1-3 /etc/passwd 截取passwd的第一列到第三列
实验:编写脚本显示本机ip:
方法一:
方法二:
实验:显示本机用户名
sort
多用于字符排序
sort -n 纯数字排序
sort -r 倒序
sort -u 去掉重复数字
sort -o 输出到指定文件中
sort -t 指定分隔符
sort -k 指定要排序的列
uniq
对重复字符做相应的处理
uniq -u 显示唯一的行
uniq -d 显示重复的行
uniq -c 每行显示一次并统计重复次数
test
test命令和[ ]等同
test “A"=="b"等同与 [ "A"=="B” ] ##中括号两头有空格
(1)A=B
eq仅限数字,=应用万物
[ "$A" = "$B" ]
[ "$A" -eq "$B" ]
[ "$a" = "$b"] && echo yes || echo no
test "$a" = "$b" && echo yes || echo no
(2)A!=B
[ "$A" != "$B" ]
[ "$A" -ne "$B" ]
(3)A<=B
[ "$A" -le "$B" ]
(4)A<B
[ "$A" -lt "$B" ]
A>=B
[ "$A" -ge "$B" ]
(6)A>B
[ "$A" -gt "$B" ]
A!=B且A>B
[ "$A" -ne "$B" -a "$A" -gt "$B" ]
(8)A!=B或A>B
[ "$A" -ne "$B" -o "$A" -gt "$B" ]
9)判断A是为空
[ -z "$A" ]
实验:判断数字是否在10以内
测试
(10)判断A是不为空
[ -n "$A" ]
(11)判断两个文件为硬链接
[ "file1" -ef "file2" ]
[ "/mnt/file" -ef "/mnt/file1" ]&&echo yes ||echo no
12)判断file1比file2时间迟
[ "file1" -ot "file2" ]
[ "/mnt/file" -ot "/mnt/file1" ]&& echo yes || echo no
(13)判断file1比file2时间早
[ "file1" -nt "file2" ]
[ "/mnt/file" -nt "/mnt/file1" ]&& echo yes || echo no
一个节点对应两个数据区域
inode节点相同
14)判断文件是否存在
[ -e "file" ]
(15)判断该文件是否是普通文件
[ -f "file" ]
(16)判断该文件是否是套接字
[ -S "file" ]
(17)判断该文件是否是块设备
[ -b "file" ]
(18)判断该文件是否是目录
[ -d "file" ]
(19)判断该文件是否是字符设备
[ -c "file" ]
20 软链接
[ -L "file" ]
实验:检测输入的名称类型
测试
tr
大小写字母转换
在脚本中不区分大小写时使用
tr ‘A-Z’ ‘a-z’ ##将大写字母转换成小写字母
{ } 表示其中的内容属于某个程序
( ) 表示其中的内容属于一个整体
实验:连接其他主机,接通显示up,不通显示down
-c1表示连接次数为1次
-w表示连接延迟时间1秒