Vim文本编辑器
默认会安装在当前所有的Linux操作系统上,对代码有着色功能,亦有些编程场景能够自动修正错误代码。
Vim编辑器中设置了三种模式—命令模式、末行模式和编辑模式
命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的5行
yy 复制光标所在整行
5yy 复制从光标处开始的5行
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步的操作
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
输入模式:正常的文本录入
输入a、i、o等键进入输入模式,Ese键退出输入模式
末行模式:主要用于保存或退出文件
在命令模式中输入一个冒号就可以了,常用:wq!,强制保存退出
配置主机名称
主机配置一个主机名,主机之间可以通过这个类似于域名的名称来相互访问。
在Linux系统中,主机名大多保存在/etc/hostname文件中
vim /etc/hostname 使用Vim编辑器修改etc/hostname主机名称文件,进入后自定义主机名
hostname 查看主机名称是否修改(可能要重启生效)
hostnamectl set-hostname 主机名 修改主机名称,立即生效(不用重启)
编写Shell脚本
Shell脚本的组成:脚本名称、脚本注释、脚本命令
vim example.sh 编写脚本
#!/bin/bash 脚本的声明
#For Example BY linuxprobe.com 脚本的注释
pwd 脚本的命令
ls -al 脚本的命令
接收用户的参数
$0 对应脚本的名称
$# 对应用户总共输入多少个参数
$* 对应用户输入的具体是哪些参数
$? 对应上一次命令执行的返回值
$数字 对应用户输入的第几个参数
判断用户的参数
文件测试语句;
逻辑测试语句;
整数值比较语句;
字符串比较语句;
文件测试语句即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符
格式为[ 条件表达式 ]
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
[ -d /etc/fstab ]
echo $? 返回值为0结果为是,返回值为1结果就不是
逻辑测试语句对测试结果进行逻辑分析,根据测试结果实现不同效果
&& 当前面命令执行成功时,执行后面命令
|| 当前面命令执行失败时,执行后面命令
! 取反值
[ ! $USER = root ] && echo "user" || echo "root" 如果当前不是root用户,输出user,否则输出root
整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,
而且不能想当然地使用日常生活中的等号、大于号、小于号等来判断。
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
[ 10 -gt 10 ] 比较10是否大于10
echo $? 返回值为1,不是
[ `free -m | grep Mem: | awk '{print $4}'` -le 1024 ] && echo "不足" || echo "充足"
提取示内存信息,打印第4个变量,比较是否小于1024,是则输出不足,不是则输出充足
字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。
它经常用来判断某个变量是否未被定义(即内容为空值)
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
[ -z $String ] 判断变量String是否被定义
echo $? 输出结果为0代表没有被定义,输出1则代表被定义
流程控制语句
if条件测试语句
for条件循环语句
while条件循环语句
case条件测试语句
if条件语句:单分支结构、双分支结构、多分支结构
单分支结构:
if 条件测试语句
then 测试语句条件成立执行的命令序列
fi
双分支结构:
if 条件测试语句
then 测试语句条件成立执行的命令序列
else 测试条件不成立执行的命令序列
fi
多分支结构:
if 条件测试语句
then 测试语句条件成立执行的命令序列
elif 上条测试条件若不成立,执行这条测试语句看是否成立,成立则执行下面的命令序列
then 测试语句条件成立执行的命令序列
else 测试语句条件成立执行的命令序列
fi
vim chkscore.sh
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):88
88 is Excellent
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):80
80 is Pass
for条件循环语句
for 变量名 in 取值列表
do
命令序列
done
vim CheckHosts.sh
#!/bin/bash
HLIST=$(cat ~/ipaddrs.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ];then
echo "Host $IP is On-line."
else
echo "Host $IP is Off-line."
fi
done
[root@linuxprobe ~]# ./CheckHosts.sh
Host 192.168.10.10 is On-line.
Host 192.168.10.11 is Off-line.
Host 192.168.10.12 is Off-line.
while条件循环语句
while 条件测试操作
do
命令序列
done
[root@linuxprobe ~]# vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
do
read -p "请输入您猜测的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是 $PRICE"
echo "您总共猜测了 $TIMES 次"
exit
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
case条件测试语句
case 变量值 in
模式1
命令序列
;;
模式2
命令序列
;;
*)
默认命令序列
esac
[root@linuxprobe ~]# vim Checkkeys.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按Enter键确认:6
您输入的是 数字。
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按Enter键确认:p
您输入的是 字母。
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按Enter键确认:^[[15~
您输入的是 空格、功能键或其他控制字符。
计划任务服务程序
at命令(一次性计划任务,执行一次):
at 时间 编辑计划任务
at -l 查看已设置好但未执行计划的任务
atrm 任务序号 删除计划任务(任务序号用at -l可查看)
at 23:30
warning: commands will be executed using /bin/sh
at> systemctl restart httpd
at> 此处请同时按下<Ctrl>+<d>键来结束编写计划任务
job 1 at Wed Oct 14 23:30:00 2020
[root@linuxprobe ~]# at -l
1 Wed Oct 14 23:30:00 2020 a root
[root@linuxprobe ~]# atrm 1
crontab命令(长期性计划任务)
crontab -e 创建、编辑计划任务
crontab -l 查看当前计划任务
crontab -r 删除某条计划任务
编辑计划任务有6个字段依次是:
分钟、小时、日、月、星期、命令(以绝对路径的方式使用,先用where is 查找路径)
计划任务中除了“分”字段必须要有数值,其他字段都可以由*占位,表示不设置
例如:2 * * * * reboot 每隔两分钟重启
字段中逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,
则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。
[root@linuxprobe ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot 每周一、三、五凌晨3点25将wwwroot文件打包