vim 文本编辑器shell脚本:
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vim 文本编辑器shell脚本:相关的知识,希望对你有一定的参考价值。
vim 文本编辑器:
三种主要模式:
命令模式(默认):移动光标,剪切/粘贴文本
插入(编辑)模式:修改文本 输入i 进入插入模式
扩展模式:保存,退出等
快键
i: insert, 在光标所在处输入
I:在当前光标所在行的行首输入
a: append, 在光标所在处后面输入
A:在当前光标所在行的行尾输入
o: 在当前光标所在行的下方打开一个新行
O:在当前光标所在行的上方打开一个新行
Ctrl+f 向文件尾部翻一屏
ctrl+b 向文件首部翻一屏
ctrl+d 向文件尾部翻半屏
ctrl+u 向文件首部翻半屏
:q 退出
:q! 强制退出,丢弃做出的修改
:wq保存退出
:x 保存退出
命令模式
ZZ: 保存退出
ZQ:不保存退出
w写(存)磁盘文件
wq写入并退出
x 写入并退出
q 退出
q!不存盘退出,即使更改都将丢失
r filename 读文件内容到当前文件中
w filename 将当前文件内容写入另一个文件
查找并替换
s: 在扩展模式下完成查找替换操作
格式:s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
修饰符:
i: 忽略大小写
g: 全局替换;默认情况下,每一行只替换第一次出现;
查找替换中的分隔符/可替换为其它字符,例如
[email protected]/[email protected]/[email protected]
s#/boot#/#i
扩展模式:地址定界
.: 当前行
$: 最后一行
.,$-1 当前行到倒数第二行
%:全文, 相当于1,$
定制vim的工作特性
配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
扩展模式:当前vim进
bash脚本编程:
bash的配置文件
全局配置:
/etc/profile
/etc/profiel.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc
shell 登录两种方式:
交互式登录:
(1)直接通过终端输入帐号密码登录
(2)使用 su - chen 切换用户
执行顺序:
/etc/profile -> /etc/profile.d/*.sh -> ~/.bashrc_profile -> ~/.bashrc -> /etc/bashrc
非交互式登录:
(1)su chen
(2)图形界面打开的终端
(3)执行脚本
执行顺序:
~/.bashrc -> /etc/bashrc-> /etc/profile.d/*.sh
profile类
按功能划分,存在两类:
profile:为交互式登录的shell提供配置
全局:/etc/profile, /etc/profile.d/*.sh
个人:~/.bash_profile
功能:
(1)用于定义环境变量
(2)运行命令或脚本
bashrc类:
bashrc类:为非交互式和交互式登录的shell提供配置
全局:/etc/bashrc
个人:~/.bashrc
功用:
(1)定义命令别名和函数
(2)定义本地变量
修改profile和bashrc文件后需生效
两种方法:
1、重新启动shell进程
2 . 或source
列:
.~/.bashrc
BASH 退出任务
保存在~/.bash_logout文件中(用户)
在退出登录shell时运行
用于
创建自动备份
删除临时文件
编程基础:
程序:数据+指令
程序编程风格:
过程式:以指令为中心,数据服务于指令
对象式:以数据为中心,指令服务于数据
shell程序:提供了编程能力,解释执行
编程逻辑处理方式:
顺序执行
循环执行
选择执行
shell 编程:过程式、解释执行
数据存储:变量、数组
表达式:a + b
语句:if
shell格式要求:首行shebang机制
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
shell 脚本的用途:
自动化常用命令
执行系统管理和故障
创建简单的应用程序
处理文本或文本
创建shell脚本:
第一步:使用文本编辑器来创建文本文件
第一行必须包括shell声明序列:#!
#!/bin/bash
添加注释
注释以#开头
第二步:运行脚本
给予执行权限,在命令行上指定脚本的绝对或相对路径
直接运行解释器,将脚本作为解释程序的参数运行
示列:
#!/bin/bash
#author chen
#Versions 1.0
echo "The host of time: $(date)" 显示当前的时间
echo "The current directory: $(pwd)" 显示当前所在的目录
脚本调试
bash -n #### :检查脚本中的语法中的错误
建议 :每次写完脚本都检测一下
bash -x ####:给脚本添加x执行权限
变量:命令的内存空间
变量的类型:
作用:
1、数据存储格式
2、参与的运算
3、表示的数目范围
类型:
字符
数值:整型、浮点型
强类型:
定义变量时必须指定类型、参与运算必须符合类型
要求:调用未声明变量会产生错误
弱类型:
无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用
变量命名法则:
1、不能使程序中的保留字
2、只能使用数字、字母及下划线,且不能以数字开头
3、看到名字知道意思
4、统一命名规范
bash变量的种类:
根据变量的生效范围等标准
本地变量:生效范围为当前shell进程;对当前shell之外的其他shell进程,包括当前shell的子shell进程均无效
变量赋值:name=‘value’
可以使用引用value:
(1)可以是直接字串:name=‘root’
(2)变量引用:name="$USER"
(3)命令引用:name=`命令`,name=$(命令)
变量引用:${name},$name
"" 弱引用,其中的变量引用会被替换为变量值
‘‘ 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
删除变量:unset name
练习:
1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。
vim systeminfo.sh
#!/bin/bash
#
echo "The current host name: $(hostname)"
echo "The IPV4: `ifconfig eno16777736 | head -2 | tail -1 | tr ‘ ‘ ‘#‘ | cut -d# -f 10`"
echo "The Operating system: `cat /etc/centos-release`"
echo "Linux Versions: `uname -r`"
echo "CPU model: `cat /proc/cpuinfo | grep "model name" | tail -1 | cut -d: -f2`"
echo "memory Size: `cat /proc/meminfo | grep "MemTotal" | cut -d: -f2`"
echo "Disk size: `fdisk -l /dev/sda | head -n 2 | tail -1 | cut -d: -f2`"
执行结果:
The current host name: localhost.localdomain
The IPV4: 192.168.148.121
The Operating system: CentOS Linux release 7.2.1511 (Core)
Linux Versions: 3.10.0-327.el7.x86_64
CPU model: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
memory Size: 1868692 kB
Disk size: 214.7 GB, 214748364800 bytes, 419430400 sectors
2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中
#!/bin/bash
#
cp -a /etc/ /root/etc`date +%F`、
显示结果:
etc2016-12-24
3、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值
#!/bin/bash
#
echo "According to maximum utilization rate of hard disk partition: `df -h | grep "sda" | tr -s ‘ ‘ | tr -s ‘ ‘ ‘#‘ | cut -d# -f5 |sort -n | tail -1`" 显示结果:
[[email protected] ~]# bash bin/disk.sh
According to maximum utilization rate of hard disk partition: 5%
4、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序
#!/bin/bash
#
echo "Connect the unit of IPV4 addresses to display:"
netstat -tnp | tail -n +3 | tr -s ‘ ‘ ‘:‘ | cut -d: -f6 | uniq -c | sort -rn
显示结果:
[[email protected] ~]# bash /bin/links.sh
Connect the unit of IPV4 addresses to display:
2 192.168.148.123
环境变量:生效范围为当前shell进程及其子进程
变量声明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用:$name,${name}
显示所有环境变量:
exprot
env
printenv
删除:unset name
bash内建的环境变量:
PATH、SHELL、USER、UID、HISTSIZE、HOME、PWD、OLDPWD、HISTFILE、PS1
局部变量:生效范围为当前shell进程中某代码片段(通常指函数)
位置变量:$1,$2. . .来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
$1,$2,. . .:对应第1、第2等参数。shift[n]换位置
$0:命令本身
$*:传递给脚本的所有参数,全部参数合为一个字符串
[email protected]:传递给脚本的所有参数,每个参数为独立字符串
$#:传递给脚本的参数的个数
[email protected] $* 只在被双引号包起来的时候才会有差异
只读变量:只能声时,但不能修改和删除
readonly name
示列:
PS=3.445 定义一个变量
[[email protected] ~]# readonly PS 确定 之后就无法修改
[[email protected] ~]# echo $PS
3.445
[[email protected] ~]# PS=3.11 注意:只有脚本运行玩、退出终端exit 才可以修改定义
-bash: PS: readonly variable
declare -r name
算术运算:
bash中的算术运算:help、let
+、-、/、%取模(取余)、**(乘方)
实现算术运算:
(1)let var=算术表达式
let v3=v1+v2
[[email protected] ~]# echo $v3
30
(2)var=$[算术表达式]
v4=$[v1+v2]
[[email protected] ~]# echo $v4
30
(3)var=$((算术表达式))
v5=$((v1+v2))
[[email protected] ~]# echo $v5
30
(4)var=$(expr arg1 arg2 arg3. . .)
v5=$(expr 1 + 2)
[[email protected] ~]# echo $v5
3
(5)declare -i var=数值
declare -i v1=100
[[email protected] ~]# declare -i v2=100
[[email protected] ~]# declare -i v3=v1+v2
[[email protected] ~]# echo $v3
200
(6)echo `算术表达式` | bc
乘法符号有些场景中需要转义,如*
bash有内建的随机数生成器:$RANDOM(1-32767)
echo $[$RANDOM%50]:0-49之间随机数
赋值
增强型赋值:
+=、==、*=、/=、%=
let varOPERvalue
例如:let count+=3
自动3后字赋值
练习:
练习1:写一个脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和
#!/bin/bash
#
ID1=$(head -n 10 /etc/passwd | grep "operator" | cut -d: -f3)
echo "ID1=$ID1"
ID2=$(head -n 20 /etc/passwd | grep "tss" | cut -d: -f3)
echo "ID2=$ID2"
ID=$[ID1+ID2]
echo "Total:$ID"
显示结果:
[[email protected] bin]# bash sumid.sh
ID1=11
ID2=59
Total:70
练习2:写一个脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和
#!/bin/bash
#
K1=`grep -c "^[[:space:]]*$" $1`
K2=`grep -c "^[[:space:]]*$" $2`
K3=$[K1+K2]
echo $K3 | bc
显示结果:
bash sumspace.sh /etc/profile /etc/fstab
12
练习3:写一个脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件
#!/bin/bash
C1=`ls /etc/ | wc -w`
C2=`ls /var/ | wc -w`
C3=`ls /usr/ | wc -w`
C=$[C1+C2+C3]
echo $C
显示结果:
[[email protected] bin]# bash sumfile.sh
295
明天继续脚步发脚本内容
本文出自 “linux” 博客,请务必保留此出处http://001230.blog.51cto.com/11559496/1885992
以上是关于vim 文本编辑器shell脚本:的主要内容,如果未能解决你的问题,请参考以下文章