Linux--shell脚本基本设置及常用命令
1.什么是shell
shell是操作系统中的一个软件,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口。系统中的命令用shell去解释,shell接收系统回应的输出并显示到屏幕上。
shell脚本
shell script(程序化脚本)是利用shell的功能所写的一个“程序”,这个程序是使用纯文本文件,将一些shell的语法和指令写在里面,搭配正则表达式,管线命令与数据流重导向等功能,用shell脚本保存执行的动作,实现动作的批量执行。
2.shell脚本的格式
shell脚本文件名称可以任意,但为了避免被认为是普通文件,加上.sh 后缀,以表示是一个脚本文件。
shell脚本中一般会出现三种:
- 第一行的脚本声明(#!)用来告诉系统使用哪种shell解释器来执行脚本;
- 第二行 #注释信息:对脚本功能和命令的介绍信息
- 执行语句
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. 脚本的调用:
脚本建立完成后,有四种调用方式:
-
sh +脚本绝对路径的方式可以执行
-
直接输入脚本的绝对路径进行执行
前提是脚本文件有执行权限
chmod +x 脚本所在路径 -
source test.sh
-
. 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'
- Linux下Shell脚本中几种基本命令的替换区别
- linux下基本常常用到的shell命令(部分)
- Linux下Shell脚本中几种基本命令的替换区别
- 设置Linux命令或者shell脚本的运行时间限制
- linux常用命令 和shell脚本(必知)
- 【shell脚本开发技术】linux中shell script脚本开发编程常用命令与脚本速记指南
- 常用linux命令及shell脚本
- Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令
- Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令
- Linux命令行与shell脚本编程-part1-基本bash shell命令
- Linux笔记——常用命令详解及Shell脚步基本用法
- Linux 下Shell 脚本几种基本命令替换区别
- 手边常用的 linux命令及shell脚本
- [置顶] linux常用命令与shell脚本编程
- Linux下shell脚本编写:常用命令
- Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令
- Linux-Shell脚本编程-学习-2-Linux基本命令
- Linux-Shell脚本编程-学习-1-Linux基本命令
- Linux(7) 常用命令扩展 改变用户环境变量 (可以实现登陆就执行shell脚本)
- Shell 脚本常用命令