vim编辑器与shell命令
最近看《linu就该这么学》,做个笔记哈。书里是红帽系统,我自己的是utubun,虽说有些地方是不一样的,但是觉得这本书还是很适合新手的,就把差异的地方跳过了,或者是遇到有差的地方,去网上搜一下,现在还很基础,这些基础的东西应该差别不太大吧。
vim文本编辑器
vim编辑器有三种模式:命令模式、末行模式、输入模式
- 命令模式:控制光标移动,可以对文本进行删除、复制、粘贴等工作。
- 输入模式:正常的文本录入。
- 行末模式:保存、退出与设置编辑环境。
每次运行vim编辑器后默认是命令模式
下面是一些快捷键
命令 | 作用 |
dd | 剪切光标所在行 |
5dd | 剪切从光标开始的5行 |
yy | 复制光标所在行 |
5yy | 复制从光标开始5行 |
p | 之前dd、yy操作的数据粘贴到光标后 |
/string | 从上往下搜索字符串 |
?string | 从下往上搜索字符串 |
n | 显示搜索命令定位到的下一个字符串 |
N | 显示搜索命令定位到的上一个字符串 |
u | 撤销上一步的操作 |
命令 | 作用 |
:w | 保存 |
:q | 退出 |
:q! | 强制退出 不保存修改内容 |
:wq | 保存修改内容并退出 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:命令 | 执行命令 |
:整数 | 跳转到该行 |
了解Shell脚本
查看系统中所有可用的shell解释器:
cat /etc/shells
查看当前的shell解释器:
echo $SHELL
一个完整的shell脚本则应该包括 脚本声明 注释信息 可执行语句
- 脚本声明 #! :告诉系统用何种shell来解释
- 注释信息 # :注释
- 可执行语句 :执行的具体命令
简单的shell脚本 :shelltest.sh
#!/bin/bash
echo "hello world"
执行 3中方法:
./shalltest.sh
sh shalltest.sh
sourc shalltest.sh
第一种./shelltest.sh,需要设置下权限 chmod u+x shelltest.sh
shell脚本可以接收用户输入的参数,命令名 参数1 参数2 参数3
可以接收用户参数的shell脚本
vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"
执行:
sh example.sh
$0 | 当前执行shell脚本的程序名 |
$1-9,${1 0},¥{1 1}…… | 参数的位置变量 |
$# | 一共有多少个参数 |
$* | 所有位置变量的值 |
$? | 判断上一条命令是否执行成功,0为成功,非0失败 |
shell脚本的条件测试语句能够测试特定 的表达式是否成立,当条件成立返回值为0,否则非-
测试语句格式 : [ 条件表达式 ] 注意中括号两边都有空格
测试语句:文件测试、逻辑测试、整数值测试、字符串比较
- 文件测试
测试/etc/abc是否是目录
[ -d /etc/abc ]
echo $? #显示执行结果
测试/etc/abc.txt是否为文件
[ -f /etc/abc.txt ]
echo $? #显示执行结果
操作符 | 作用 |
-d | 测试是否为目录 |
-e | 测试文件或目录是否存在 |
-f | 判断是否为文件 |
-r | 当前用户是否有权限读取 |
-w | 当前用户是否有权限写入 |
-x | 当前用户是否有权限执行 |
- 逻辑测试
若当前登录的用户不是root,则输出user
[ $USER != root ] && echo "user"
操作符 | 作用 |
&& | 逻辑与,而且的意思 |
|| | 逻辑或,或者的意思 |
! | 逻辑非,不的意思 |
- 数值比较
# 10是否大于10?
[ 10 -gt 10]
echo $?
# 10 是否等于10?
[ 10 -eq 10 ]
echo $?
操作符 | 作用 |
-eq | 判断是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
- 字符串比较
# 判断string变量是否为空:
[ -z $stirng]
echo $?
操作符 | 作用 |
= | 比较字符串内容是否相同 |
!= | 字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
条件测试语句
if条件语句、for条件语句、while条件语句、case条件语句
- if条件语句:
# 语法
if 条件测试操作
then 命令序列
fi
if 条件测试操作
then 命令序列1
else
命令序列2
fi
if 条件测试操作
then 命令序列1
elif
then 命令序列2
else
命令序列3
fi
# 例 输出成绩等级
#!/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
- for条件语句
# 语法
for 变量名 in 取值列表
do
命令序列
done
# 从列表文件读取主机地址,逐个测试是否在线。
# 首先创建主机地址列表:
vim ipadds.txt
192.168.10.10
192.168.10.11
192.168.10.12
vim for.sh
#!/bin/bash
HLIST=$(cat ~/ipadds.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP $> /dev/null
echo "IP is : $IP"
if [ $? -eq 0 ]
then
echo "Host $IP is up."
else
echo "Host $IP is down."
fi
done
- while条件语句
# 语法
while 条件测试操作
do
命令序列
done
# 猜一个0-999的整数
vim while.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 1
elif [ $INT -gt $PRICE ]
then
echo "太高了!"
else
echo "太低了!"
fi
done
- case条件语句
# 语法
case 变量值 in
模式1)
命令序列
;;
模式2)
命令序列
;;
*)
默认命令序列
esac
# 判断用户输入的字符为字母还是数组还是其它
vim case.sh
#!/bin/bash
read -p"请输入一个字符,并按enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格/功能键或其他控
制字符。"
esac
计划任务服务
1 .一次性任务服务,是有atd服务/进程来实现的,计划的管理操作是 at 命令
来看个例子
在 23:00 创建一个文件夹 pidan
# at 23:00
at > mkdir pidan
按ctrl+d来保存退出
可以用atq 来查看任务列表,任务完成后会自己在列表中消失
参数 | 作用 |
at<时间> | 安排一次性任务 |
atq 或 at -l | 查看任务列表 |
at -c 序号 | 预览任务与设置环境 |
atrm 序号 | 删除任务 |
2 .创建长期可循环的计划任务,则用到cron服务
创建、编辑计划任务:crontab -e [-u 用户名]
查看计划任务:crontab -l [-u 用户名]
删除计划任务:crontab -r [-u 用户名]
在创建、编辑计划任务时有个固定的格式
分钟 小时 日期 月份 星期 命令
例 每周1、3/4的凌晨3点25分将/home/wwwroot目录打包备份为backup.tar.gz
25 3 * *1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot