一、Vim编辑器
1.1 概念及其作用
用于编写、修改文本,是默认已经安装在Linux上的文本编辑器,类似于windows的Word
1.2 vim的三个工作模式
1)命令模式:Vi/Vim 默认模式,不能输入字符,但是可以控制光标移动,关键词检索,复制,粘贴等基本功能,通过命令模式可以进入末行模式和输入模式
2)末行模式:从命令模式上输入冒号(: )进入,可以对文本进行保存、退出、查找等操作,可通过 Esc 键退回到命令模式
3)输入模式:通过命令模式下键入 a/i/o 进入,输入字符串、文本信息等,可通过 Esc 键退回到命令模式
1.3 vim的编辑保存模块
i | 在光标所在位置进行编辑; |
a | 在光标所在位置后一位进行编辑; |
o | 在光标所在位置重新启动一行进行编辑; |
:w | 保存当前编辑本文; |
:q | 退出当前编辑文本; |
:! | 强制使用 |
1.4 vim的搜索替换模块
/string | 自顶向下查找; |
?string | 自底向上查找; |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:noh | 不高亮显示 |
:set ingorecase | 开启忽略大小写; |
:set noingorecase | 关闭忽略大小写; |
:[range]s/字符串 A/字符串 B/[参数] | 用字符串B替换字符串A range表示范围:1,4 ----> 第一行至第四行 $ ------> 最后一行 %------> 全文 参数:c ----> 每次替换前进行询问 e ----> 不显示错误信息 g ----> 替换一行中所有匹配项 |
开启忽略大小写:
把windows替换为Centos(注意windows是小写):
交互询问:
替换成功:
1.5 vim的针对程序员模块
:syntax on | 开启语法检查 |
:set autoindent | 自动缩进,默认 8 个空格 |
:set shiftwidth=4 | 设置缩进字符 |
注意:可以通过编辑配置/etc/vimrc 使某些针对程序员的功能自动生效 |
1.6其他快捷命令
h/j/k/l | 控制光标移动(左下上右) |
^ | 将光标移至行首 |
$ | 将光标移至行尾 |
G | 将光标移至文件尾 |
gg | 将光标移至文件头 |
ctrl + f | 向下翻页 |
ctrl + b | 向上翻页 |
u | 撤销操作 |
x | 删除光标所在位置内容 |
dd | 删除光标所在行 |
D | 删除光标所在位置到所在行结尾 |
yy | 复制光标所在行 |
p | 在光标所在位置将复制或删除内容粘贴 |
二、shell编程入门
2.1 Shell的概念及其作用
Shell 是一款 Linux 系统下,用于用户命令与 Linux 内核连接的软件,是一款命令解释器,能够识别用户输入的各种命令,并传递给操作系统。大多数 Linux 版本默认情况下使用的 Shell 版本是BASH。
2.2 Shell 脚本
Shell 脚本,严格上叫做 BASH 编程, 依赖于 Vim 编辑器,作为文本保存在 Linux 上,一定以.sh结尾Shell 解释器支持变量、命令行参数、交互式输入、函数模块及流控语句等
2.3 Shell 编程
2.3.1分类
1)交互式:用户每输入一条命令,结果显示在屏幕上
2)非交互式:用户每输入一条命令后,结果不显示在屏幕上(输出重定向)
3)批处理:用户编写好完整shell脚本后一次执行
2.3.2执行方式
1)方式1:给脚本加上x权限并以绝对或相对路径+脚本文件执行(因为默认情况所有的命令都是通过PATH寻找命令,不加路径会通过PATH变量查找)
[root@RHEL6 ~]# cat test.sh
seq 3
[root@RHEL6 ~]# ll test.sh
-rw-r--r--. 1 root root 6 May 10 09:10 test.sh
[root@RHEL6 ~]# chmod u+x test.sh //赋予x权限
[root@RHEL6 ~]# ll test.sh
-rwxr--r--. 1 root root 6 May 10 09:10 test.sh
[root@RHEL6 ~]# ./test.sh
1
2
3
2)方式2:使用bash/sh命令+脚本文件(无需x权限)
[root@RHEL6 ~]# chmod u-x test.sh //取消x权限
[root@RHEL6 ~]# ll test.sh
-rw-r--r--. 1 root root 6 May 10 09:10 test.sh
[root@RHEL6 ~]# bash test.sh
1
2
3
2.3.3位置参数
$0 | 脚本的名称 |
$n | 第n个位置参数 |
$# | 位置参数总个数 |
$* | 所有的位置参数 |
[root@RHEL6 ~]# bash test.sh hello world
This script is test.sh ///$0
The parameter number is 2,they are hello world
The first is hello ///$1
The second is world ///$2
2.4判断用户的参数
1)两种形式:
① test命令:test 参数+表达式
② [ ]命令:[ 表达式1 参数 表达式2 ]
2)结果:
条件成立,返回数字0;不成立,返回(非零)随机数;保存在$?中
2.4.1文件测试
用于判断文件是否存在,并且是什么类型
操作符 | 作用 |
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-L | 判断是否为链接文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
[root@RHEL6 ~]# ls
anaconda-ks.cfg Downloads Music Templates www.mqzzl.fun
Desktop install.log Pictures test.sh
Documents install.log.syslog Public Videos
[root@RHEL6 ~]# test -f Music/
[root@RHEL6 ~]# echo $?
1
[root@RHEL6 ~]# [ -w test.sh ]
[root@RHEL6 ~]# echo $?
0
2.4.2逻辑测试(与、或、非)
1)”与 &&”:符号两边的表达式同时成立,才是真
[root@RHEL6 ~]# [ -d Music ] && [ -w test.sh ]
[root@RHEL6 ~]# echo $?
0
[root@RHEL6 ~]# [ -e music ] && [ -w test.sh ]
[root@RHEL6 ~]# echo $?
1
2)”或 ||”:符号两边的表达式有一个成立就认为是真
[root@RHEL6 ~]# [ -e music ] || [ -w test.sh ]
[root@RHEL6 ~]# echo $?
0
3)” 非 !”: 对表达式取反
[ $USER != roo ] && echo $USER
root
[root@RHEL6 ~]# echo $?
0
2.4.3 整数值测试(比较大小,不能用 > <和=)
操作符 | 作用 |
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
[root@RHEL6 ~]# a=10
[root@RHEL6 ~]# b=100
[root@RHEL6 ~]# if [ $a -lt $b ]; then echo "true"; fi
true
2.4.4字符串测试(比较区别)
操作符 | 作用 |
= | 比较字符串内容是否相同 |
!= | 比较字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
[root@RHEL6 ~]# ls
anaconda-ks.cfg Downloads Music Templates www.mqzzl.fun
Desktop install.log Pictures test.sh
Documents install.log.syslog Public Videos
[root@RHEL6 ~]# [ -z $test.sh ]
[root@RHEL6 ~]# echo $?
1
[root@RHEL6 ~]# echo $test.sh
.sh
2.5流程控制语句
2.5.1 if语句--判断语句
1)用于对条件表达式进行判断,执行满足条件表达式的语句
2)语法结构:if-then-fi,if-then-else-fi,if-then-elif-then-else-fi
[root@RHEL6 ~]# cat ping.sh
#!/bin/bash
ping -c 4 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is online"
else
echo "Host $1 is offline"
fi
[root@RHEL6 ~]# bash ping.sh 192.168.100.1
Host 192.168.100.1 is online
[root@RHEL6 ~]# bash ping.sh 192.168.100.2
Host 192.168.100.2 is offline
-------------------------------------------------------------------------------------
[root@RHEL6 ~]# cat Grade.sh
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 80 ];then
echo "The grade is excellent!!"
elif [ $GRADE -ge 60 ]&&[ $GRADE -lt 80 ];then
echo "The grade is pass"
else
echo "The grade is failure"
fi
[root@RHEL6 ~]# bash Grade.sh
Enter your score(0-100):88
The grade is excellent!!
[root@RHEL6 ~]# bash Grade.sh
Enter your score(0-100):59
The grade is failure
2.5.2 for语句--循环语句
1)根据取值列表,循环执行命令,循环彻底后结束
2)语法结构:
for 变量 in {list}
do
循环体
done
[root@RHEL6 ~]# cat user.txt
tom
jack
lilei
lucy
[root@RHEL6 ~]# cat for.sh
#!/bin/bash
for USER in `cat /root/user.txt`
do
id $USER &> /dev/null
if [ $? -eq 0 ];then
echo "$USER exists"
else
useradd $USER &> /dev/null
echo "1234" | passwd --stdin $USER &> /dev/null
if [ $? -eq 0 ];then
echo "$USER,Create success"
else
echo "$USER,Create failure"
fi
fi
done
[root@RHEL6 ~]# bash for.sh
tom exists
jack,Create success
lilei,Create success
lucy exists
2.5.3 while语句--循环语句
1)用于进行条件判断,当条件不满足时,结束命令!
2)语法结构:
while 表达式
do
循环体
done
[root@RHEL6 ~]# cat while.sh
#!/bin/bash
NUMBER=$(expr $RANDOM % 1000)
TIMES=0
while true
do
read -p "Please input a number(0-999):" INT
let TIMES++
if [ $INT -gt $NUMBER ];then
echo "too big"
elif [ $INT -lt $NUMBER ];then
echo "too small"
else
echo "It is right,the number is $NUMBER"
echo "TIMES=$TIMES"
exit 0
fi
done
Please input a number(0-999):959
too small
Please input a number(0-999):960
It is right,the number is 960
TIMES=2
2.5.4 case语句--判断语句
1)用于对条件表达式进行判断,执行满足条件表达式的语句
2)语法结构:
case 变量 in
条件表达式 1)
语句;;
条件表达式 2)
语句;;
*)
语句;;
esac
[root@RHEL6 ~]# cat case.sh
#!/bin/bash
read -p "Please input a char:" KEY
case $KEY in
[a-z]|[A-Z])
echo "This is a char"
;;
[0-9])
echo "This is a num"
;;
*)
echo "This is a special char"
esac
[root@RHEL6 ~]# bash case.sh
Please input a char:9
This is a num
[root@RHEL6 ~]# bash case.sh
Please input a char:h
This is a char
[root@RHEL6 ~]# bash case.sh
Please input a char:!
This is a special char