您的位置:首页 > 运维架构 > Linux

Linux--shell脚本基本设置及常用命令

2019-06-16 22:27 429 查看

1.什么是shell

shell是操作系统中的一个软件,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口。系统中的命令用shell去解释,shell接收系统回应的输出并显示到屏幕上。

shell脚本

shell script(程序化脚本)是利用shell的功能所写的一个“程序”,这个程序是使用纯文本文件,将一些shell的语法和指令写在里面,搭配正则表达式,管线命令与数据流重导向等功能,用shell脚本保存执行的动作,实现动作的批量执行。

2.shell脚本的格式

shell脚本文件名称可以任意,但为了避免被认为是普通文件,加上.sh 后缀,以表示是一个脚本文件。
shell脚本中一般会出现三种:

  1. 第一行的脚本声明(#!)用来告诉系统使用哪种shell解释器来执行脚本;
  2. 第二行 #注释信息:对脚本功能和命令的介绍信息
  3. 执行语句

3.vim创建脚本文件自动添加头部注释

vim /etc/vimrc
"开头行为注释行

"map <F9> ms:call WESTOS()<cr>'s
设置用快捷键来自动生成,一般不用快捷键,都是自动生成

autocmd BufNewFile *.sh,*.script exec ":call WESTOS()"

新创建的以.sh或.script结尾的文件自动生成头部注释

function WESTOS()
call append(0,"########################")
call append(1,"#Author                #")
call append(2,"#Create_Time: ".strftime("%Y-%m-%d")." #")
call append(3,"#mail                  #")
call append(4,"#Version:              #")
call append(5,"#Description:          #")
call append(6,"#                      #")
call append(6,"########################")
call append(7,"")
call append(8,"#!/bin/bash")
endfuction()


4. 脚本的调用:

脚本建立完成后,有四种调用方式:

  1. sh +脚本绝对路径的方式可以执行

  2. 直接输入脚本的绝对路径进行执行
    前提是脚本文件有执行权限
    chmod +x 脚本所在路径

  3. source test.sh
  4. . test.sh

注意:

  • 第一种
    sh test.sh
    与 第二种 直接输入脚本的绝对路径进行执行,将会开启一个新的shell环境去执行,
    (不指定便使用默认的shell环境,linux下默认的shell是Bourne Again Shell(bash),可以使用$SHELL变量来查看)
  • 第三种和第四种,在当前的shell解释器环境中运行`

示例:

a=1
vim test.sh
echo $a
source test.sh或者 . test.sh

不可以用sh test.sh,因为变量a属于环境级变量,只在当前环境中生效,与执行test脚本的不是同一个环境

ps  f

查看后台进程运行环境之间的关系

5.利用脚本设置shell环境颜色


6.shell脚本中的常用命令

6.1 diff

比较两个文件或目录的差异,以行为单位来进行对比。

diff  将两个文件或目录的内容进行比较
参数:
-b:忽略一行当中,仅有多个空白的差异(例如"haha"与"ha     ha "视为相同
-B:忽略空白行的差异。
-i:忽略大小写的不同。
-u:显示文件信息的不同
显示内容的含义
[num1,num2][a|d|c][num3,num4]
num1,num2    #表示在第一个文件中的行数
num3,num4    #表示在第二个文件中的行数
a             #表示添加---add
c             #表示更改---change
d             #表示删除---delete
<             #表示第一个文件中的内容,
>             #表示第二个文件中的内容
---           #分割线

diff比较文件:


test文件第二行被test1第二行替换,就内容相同。


新旧文件要修改数据的界定范围,旧文件在 1-2 行,新文件在 1-2 行
123
-haha #删除haha
+o haha #加上o haha

diff比较目录:

-r 递归比较目录

6.2 patch

常与diff配合使用

yum install patch -y
-R :代表还原,将新的文件还原成原来旧的版本
-b :备份文件。在修补文件时,重命名或复制原始文件,而不是删除它
diff -u test1 test2 > test.patch
#生成补丁文件 test.patch
patch -b test1 test.patch
#修补文件test1,并备份原来的文件,生成 test.orig

6.3 cut

cut 	-d	指定分隔符
-f	截取域
-c	指定字符

输出以:分隔的第一列和第三列

输出以:作为分隔符的第一列到第四列

示例:
截取主机的 ip 地址

ifconfig | head -n 2 | tail -n 1 | cut -d " " -f 10

截取主机的 ip 地址,以‘空格’为分隔符,截取第 10 列

6.4 sort

sort    多用于字符排序
-n      纯数字排序
-r      倒序
-u      唯一,去掉重复数字
-o      输出到指定文件
-t      指定分隔符
-k      指定要排序的列

sort test(不加任何参数,只对第一位数字进行排序)


指定以:为分隔符,对第二列进行排序

6.5 uniq

对重复字符作相应的处理。

uniq -u 显示与周围相比,唯一的行的数字
uniq -d 显示重复的行的数字
uniq -c 每行显示一次并统计重复次数

找出登陆本机次数最多的主机IP

6.6 $$,||

&&
逻辑“与”的运算符 &&,表示当前面的命令执行成功后才会执行它后面的命令
||
逻辑“或”的运算符 ||,表示当前面的命令执行失败后才会执行它后面的命令

6.7 test []

test    等价于	[ ]
=    相等
!=    不相等
-eq	相等
-ne	不相等
-le	小于等于
-lt	小于
-ge	大于等于
-gt	大于
-a	and
-o	or

-z	是否为空
-n	不为空

示例:
a=""
[ -z "$a" ] && echo yes || echo no
yes

-ef	文件标号相等
-nt	file1是否比file2新
-ot	file1是否比file2旧

软链接(多个节点号对应一个数据区域)
ln -s ping.sh hahaha
hahaha为满权限,为了不影响ping.sh操作权限

硬链接(一个节点号对应多个数据区域)
ln ping.sh haha
ls -i 查看节点号

cp 复制节点号,也复制数据区域

-e	文件是否存在
-f	普通文件
-L	连接文件
-S	套接字
-b	块设备
-d	目录
-c	字符设备




写一个脚本测试:


硬链接

ls -i 查看节点号
ln ping.sh haha
haha为ping.sh的硬链接
ln -s ping.sh xixi
xixi为ping.sh的软链接


检测是否为套接字

6.8 tr

tr 可以用来删除一段信息当中的文字,或者是进行文字信息的替换

eg: 将 w 输出的信息中,所有的小写变成大写字符:
w | tr 'a-z' 'A-Z'


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: