学习资料《Linux就该这么学》
1、Vim编辑器
Vim三种工作模式:默认进入命令模式。
➢ 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
➢ 输入模式:正常的文本录入。
➢ 末行模式:保存或退出文档,以及设置编辑环境。
输入模式:编写完成保存退出前需要按Esc键。
a:光标后面一位切换到输入模式;
i:光标当前位置切换到输入模式;
o:在光标下面在创建一行,在敲击a则进入编辑器的输入模式。在原文本上继学编辑使用o进继续进行编辑。
命令模式:在每次运行 Vim 编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作,而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的 5 行
yy 复制光标所在整行
5yy 复制从光标处开始的 5 行
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步的操作
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
末行模式:主要用于保存或退出文件,以及设置 Vim 编辑器的工作环境,还可以让用户执行外部的 Linux 命令或跳转到所编写文档的特定行数。要想切换到末行模式,在命令模式中输入一个冒号就可以了。
:w 保存
:q 退出
:q! 强制退出(放弃对文档的修改内容)
:wq! 强制保存退出
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 将当前光标所在行的第一个 one 替换成 two
:s/one/two/g 将当前光标所在行的所有 one 替换成 two
:%s/one/two/g 将全文中的所有 one 替换成 two
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串
2、编写shell脚本
2.1 初识shell脚本
Shell终端解释器当做人和计算机之间的“翻译官”,他作为用户和Linux系统内部之间的通信媒介,除了支持各种变量和参数之外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。Shell脚本命令的工作方式有两种:交互式和批处理。
➢ 交互式(Interactive):用户每输入一条命令就立即执行。
➢ 批处理(Batch):由用户事先编写好一个完整的 Shell 脚本, Shell 会一次性执行脚本
中诸多的命令。
在Liunx系统中创建新的脚本文件一般包括以下三个部分,以.sh作为后缀名:
(#!)用来告诉系统使用的是哪种Shell解释器来执行该脚本;
(#)用作注释信息,对脚本信息的功能或者是用做一些警告信息;
()自己需要执行的一些Linux命令信息。
例如:
#!/bin/bash
#An example
pwd
ls -al
需要执行.sh文件时,可以使用 bash XX.sh来执行编写的shell脚本文件。
2.2 接收用户参数
shell脚本在执行时可以接受用户输入的参数,例如$0 对应的是当前 Shell 脚本程序的名称, $#对应的是总共有几个参数, $*对应的是所有位置的参数值, $?对应的是显示上一次命令的执行返回值,而$1、$2、 $3……则分别对应着第 N 个位置的参数值,
实例:
#!/bin/bash
#An examplel
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*"
echo "第一个参数为$1,第五个是$5"
@ubuntu:~/linux_example$ sh example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six
第一个参数为one,第五个是five
2.3 判断用户的参数
Shell 脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。
按照测试对象来划分,条件测试语句可以分为 4 种:
➢ 文件测试语句;使用指定条件来判断文件是否存在或权限是否满足等情况的运算符。
参数列表:
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
实例:测试是否存在aaa这个文件夹?(若存在输出为0,不存在输出非零值)
@ubuntu:~/linux_example$ [ -d /home/aaaa ]
@ubuntu:~/linux_example$ echo $?
1
➢ 逻辑测试语句;
可以结合逻辑语句输出自定义语句
例如:[ -e /home/fda ] && echo "not found"
➢ 整数值比较语句;
整数比较运算符
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
实例:查询可用内存并判断是否小于1024,若小于,返回 “Insufficient Memory”
$ F=`free -m | grep 内存 | awk '{print $4}'`
@ubuntu:~/linux_example$ echo $F
311
@ubuntu:~/linux_example$ [ $F -lt 1024 ] && echo "Insuffiocient Memory"
Insuffiocient Memory
➢ 字符串比较语句。
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串是否是空
3、流程控制语句
3.1 if条件测试语句
(1)单分支if语句主要是由if、then、fi组成。
实例:判断某文件家是否存在,并建立。
#!/bin/bash
DIR="/home/XX/linux_example/a"
if [ -e $IDR ]
then
mkdir $DIR
fi
(2)多分支if语句主要是由if、then、else、elif、fi组成。
实例:判断用户输入的分数在哪个成绩区间内,然后输出如Excellent、 Pass、 Fail 等提示信息。
在 Linux 系统中, read 是用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量, -p 参数用于向用户显示一定的提示信息。在下面的脚本示例中,只有当用户输入的分数大于等于 85 分且小于等于 100 分,才输出Excellent 字样;若分数不满足该条件(即匹配不成功),则继续判断分数是否大于等于 70 分且小于等于 84 分,如果是,则输出 Pass 字样;若两次都落空(即两次的匹配操作都失败了),则输出 Fail 字样。
#!/bin/bash
2 read -p "Enter your grade: " Grade
3 if [ $Grade -ge 85 ] && [ $Grade -le 100 ]
4 then
5 echo "Excellet"
6 elif [ $Grade -ge 70 ] && [ $Grade -le 84 ]
7 then echo "Pass"
8 else
9 echo "Fail"
10 fi
3.2 for 条件循环语句
语句结构:
3.3 while条件循环
实例:结合while来洗衣歌猜测数值大小的脚本文件。
1 #!/bin/bash
2 PRICE=$(expr $RANDOM % 1000)
3 TIMES=0
4 echo "the real number id between 0-999"
5 while true
6 do
7 read -p "please input your number :" INT
8 let TIMES++
9 if [ $INT -eq $PRICE ] ; then
10 echo "you are right"
11 echo "right timed g $TIMES times"
12 exit 0
13 elif [ $INT -gt $PRICE ] ; then
14 echo "too high"
15 else
16 echo "too low"
17 fi
18 done
3.3 case条件测试语句(注意使用;;来结束某一case,使用esac来结束条件测试)
实例:使用case来判断输入的类型
1 #! /bin/bash
2 read -p "input a number and press Enter to ensure:" KEY
3 case "$KEY" in
4 [a-z][A-Z])
5 echo "your input is alphabet"
6 ;;
7 [0-9])
8 echo "your input is number"
9 ;;
10 *)
11 echo "your input is other inputs "
12 esac
4、计划任务服务程序
计划任务分为一次性计划任务和长期性计划任务,即只执行一次和周期性长期性执行:
➢ 一次性计划任务:今晚 11 点 30 分开启网站服务。
使用at命令来执行,一半写成“at 时间”的形式就可以,要想查看已经设置好但是没有执行的任务可以使用“at-l”命令,要想删除,可以使用“atrm 任务序号”的方式删除任务。
➢ 长期性计划任务:每周一的凌晨 3 点 25 分把/home/wwwroot 目录打包备份为backup.tar.gz。
crontab服务:
使Linux系统周期性的有规律的执行某些具体任务。
crontab命令:
crontab -e 创建编辑计划任务
crontab -l 查看当前计划任务
crontab -r 删除某项计划任务
crontab -u 以管理员身份登录,编辑其他人的计划任务
crontab参数格式:分,时,日,月,星期 命令 (某些参数没有设置需要使用*占位)
分 取值为 0~59 的整数
时 取值为 0~23 的任意整数
日 取值为 1~31 的任意整数
月 取值为 1~12 的任意整数
星期 取值为 0~7 的任意整数,其中 0 与 7 均为星期日
命令 要执行的命令或程序脚本
实例:每周135的凌晨3:25,都将使用tar命令将某网站的数据目录打包,将其作为一个备份。
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot(使用,表示多时段,使用-表示一段连续的时间,使用/来表示任务的时间间隔)