shell脚本(计算机壳层)
1.概述
脚本语言(shell、python):解释性语言,用解释器解释 运行效率低
c、java:描述性语言,运行效率高
#!/bin/bash 幻数 ,在脚本运行的时候先进行该程序
以.sh结尾的文件会有高亮显示
执行: chmod +x file.sh
再以绝对路径调用 sh /xxx/file.sh (sh file.sh)
在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
diff命令的使用
diff比较文本文件命令。它能比较单个文件或者目录内容。
diff 命令只有当输入为文本文件时才有效。 如果指定了 Directory1和 Directory2 参数,diff 命令比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。
diff命令用于比较两个文件的差异,它可以被制作成补丁文件,使用patch命令对相应的文件打补丁
diff 在比较文件过程中结果读取方式
[num1 , num2][a|c|d][num3,num4]
num1,num2 表示第一个文件中的第几行
num3,num4 表示在第二个文件中的第几行
a 表示添加 ----add
c 表示更改 ----change
d 表示删除 ----delete
< 表示第一个文件中的内容
>表示第二个文件中的内容
2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中
的第二行和第四行
比较文件
diff [options] target1 target2
diff file1 file2 ##比较文件1 文件2
diff direcory1 directory2
编辑文件westos1
编辑文件westos2
第一个和第二个进行比较以第二个文件为准则
删除第一个文件的第二行才能和第二个文件的第一行匹配
diff 中常用的参数
命令 | 作用 |
---|---|
diff -b | 不检查空格字符的不同 |
diff -B | 不检查空白行 |
diff -c | 显示全部内文,并标出不同之处 |
diff -i | 不检查大小写的不同 |
diff -p | 若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称; |
diff -q | 仅显示有无差异,不显示详细的信息 |
diff -r | 比较子目录中的文件 |
diff -u | 以合并的方式来显示文件内容的不同 |
patch命令
patch命令用于文件不同文件打布丁
patch -b file.old file.path ##-b保留原文件,进行备份生成.orig文件,并进对原文件进行补丁
yum install patch -y ##补丁工具
cut命令
cut 命令多用与字符截取
命令 | 作用 |
---|---|
cut -d | 指定分隔符 |
cut -f 1 | 截取第一列 |
cut -f 1,7 | 指定截取第1列和第7列 |
cut -f 1-7 | 截取1-7列 |
cut -c 1 | 截取第一个字符 |
cut -c 1,4 | 指定截取第1和第4个字符 |
cut -c 1-4 | 截取1-4个字符 |
sort命令
sort多用于字符排序
命令 | 作用 |
---|---|
sort -n | 纯数字排序 |
sort -r | 倒序 |
sort -u | 去掉重复数字 |
sort -o | 输出到指定文件中 |
sort -t | 指定分隔符 |
sort -k | 指定要排序的列 |
按第一位数字大小排序
uniq命令
uniq对重复字符做相应的处理
命令 | 作用 |
---|---|
uniq -u | 显示唯一的行 |
uniq -d | 显示重复的行 |
uniq -c | 每行显示一次并统计重复次数 |
uniq -c 每行显示一次并统计次数
左边的为数字出现的次数,右边的为数字
&& 和 ||
&& 用来执行条件成立后执行的命令
|| 用来执行条件不成立后执行的命令
例如:
编辑脚本如下所示
vim test.sh
ping $1 -w 3 >/dev/null && echo “$1 is up” || echo “$1 is down”
表示ping输入的ip($1),若能ping通输出结果为“$1 is up",ping不通则输出结果“$1 is down”($1表示执行脚本输入的ip,>/dev/null表示不显示输出结果)
test 命令
test 命令和 [] 等同
test “A” == “B” 等同 [ “A” == “B” ]
[ “A” = “B” ]
[ “A” != “B” ]
[ “A” -eq “B” ]
[ “A” -ne “B” ]
[ “A” -le “B” ]
[ “A” -lt “B” ]
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
<(>) 小于(大于)
<=(>=) 小于等于(大于等于)
!=不相等
-a 且
-o 或
-z 为空
-n 不为空
-ot 文件时间旧
-nt 文件时间新
-ef 互为硬链接
test 命令
命令 | 作用 |
---|---|
[-e “file” ] | 文件是否存在 |
[-f “file” ] | 是否为文件 |
[-L “file” ] | 是否为软链接 |
[-S “file” ] | 是否为套接字 |
[-b “file” ] | 是否为块设备 |
[-d “file” ] | 是否为目录 |
[-c “file” ] | 是否为字符设备 |

硬链接与软链接
硬链接
ls -i test.sh 查看test.sh的节点
ln /root/test.sh /root/c.sh 建立文件的硬链接c.sh
ls -i c.sh 查看c.sh的节点,可以看到其节点与源文件的节点相同
软链接
ln -s /root/test.sh /root/cn 建立文件的软链接cn
cat cn查看软链接
ls -i cn 查看软链接的节点,可以看到其节点与源文件不同
rm -fr /root/test.sh 刪除/root/test.sh(源文件)
查看软链接可以看到无法查看,因为其指向的文件已经被删除。
而硬链接建立的文件依旧可以查看。
软链接只建立一个节点,通过该节点来查找数据块中的内容,而硬链接则会复制其数据块,但节点不会发生改变,即使删除原来的文件,也不会对硬链接产生影响(硬链接,一个节点对应多个文件)。