开始看白帽子视频;要学的知识浩如烟海。汇编语言博客也一直未执笔,burp suite也在向更高阶的方向去学。在此写一篇Linux基础博客。
学习总览:
- Vim文本编辑器
- 编写Shell脚本
- 流程控制语句
- 计划任务服务程序
Vim文本编辑器
Vim的三种模式
- 命令模式:控制光标,增强对文本的复制、粘贴、删除和查找功能。
- 编辑模式:文本录入。
- 末行模式:保存或退出,设置编辑环境。
三种模式的切换如下图:
默认进入的就是命令模式,命令模式下的常用命令如下:
命令 | 作用 |
---|---|
dd | 删除(剪切)光标所在整行 |
yy | 复制光标所在整行 |
u | 撤销上一步的操作 |
p | 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 |
保存或退出,需要先进入末行模式。末行模式的常用命令如下:
命令 | 作用 |
---|---|
:w | 保存 |
:q | 退出 |
:q! | 强制退出(放弃对文档的修改内容) |
:wq! | 强制保存退出 |
:命令 | 执行该命令 |
:整数 | 跳转到该行 |
?字符串 | 在文本中从下至上搜索该字符串 |
/字符串 | 在文本中从上至下搜索该字符串 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
编写Shell脚本
Shell终端解释器可以看做人与计算机硬件之间的“翻译官”,它作为用户与 Linux系统内部的通信媒介,除了能够支持各种变量与参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。
Shell脚本命令的工作方式有两种:
- 交互式:用户每输入一条命令立即执行;
- 批处理:用户事先编写好一个完整的Shell脚本,Shell一次性执行其中的所有命令。
编写一个简单的Shell脚本
执行如下命令:
# 用Vim文本编辑器,新建一个learnshell1.sh文件
vim learnshell1.sh
# 定义其内容如下:
#!/bin/bash
# this is a shell script
pwd
ls -a -l
# 保存退出后,执行该脚本的两种方式
# 方式一:直接bash解释器执行该脚本
bash learnshell1.sh
# 方式二:先授权,再执行该脚本
chmod u+x learnshell1.sh
./learnshell1.sh
该命令的效果图如下:
Shell脚本是如何接收参数的
执行如下命令:
# 用Vim文本编辑器,新建一个learnshell2.sh文件
vim learnshell2.sh
# 定义其内容如下:
#!/bin/bash
# this is a shell script to learn how to use variable
echo "当前脚步名称为$0"
echo "总共传进来的变量个数为$#。"
echo "它们分别是$*。"
echo "第二个变量为$2,第五个变量为$5。"
# 保存退出后,通过如下方式执行脚本
bash learnshell2.sh one two three four five six
该命令的效果图如下:
通过效果图,可以看出:$n,就是脚本获取命令中输入的第n个参数。$0即第0个参数就是脚本的名称,$#是获取命令中有多少个参数,$*是一次性获取所有的参数。
判断用户输入的参数
Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。按测试对象可以分为:
- 文件测试语句
- 逻辑测试语句
- 整数值比较语句
- 字符串比较语句
文件测试语句
文件测试语句可使用的参数如下:
参数 | 作用 |
---|---|
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
测试用的命令如下:
# 测试(/home/learnCSPP)是否为目录
[ -d /home/learnCSPP ]
echo $?
# 测试(/home/learnCSPP/hello)是否为普通文件
[ -f /home/learnCSPP/hello ]
echo $?
# 测试(/home/learnCSPP/learnshell1.sh)是否为普通文件
[ -f /home/learnCSPP/learnshell1.sh ]
echo $?
# 测试(/home/learnCSPP/hello)是否有写入权限
[ -w /home/learnCSPP/hello ]
echo $?
# 测试(/home/learnCSPP/learnshell2.sh)是否有执行权限
[ -x /home/learnCSPP/learnshell2.sh ]
echo $?
# 测试(/home/learnCSPP/test)是否为目录
[ -d /home/learnCSPP/test ]
echo $?
该命令的效果如下:
逻辑测试语句
逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令;逻辑“或”的运算符号是||,它表示当前面的命令执行失败后才会执行它后面的命令;逻辑“非”的运算符号是!,把条件测试中的判断结果取相反值。
# 如果hello是一个可执行文件,就在终端打印echo中的内容
[ -x hello ] && echo "hello 是一个可执行文件"
# 如果test是一个目录,就在终端打印echo中的内容
[ -d test ] && echo "test 不是一个目录"
# 如果test不是一个目录,就在终端打印echo中的内容
[ -d test ] || echo "test 不是一个目录"
# 如果test不是一个目录,就在终端打印echo中的内容
[ ! -d test ] && echo "一个结果为错误的命令,逻辑非后,即该命令是正确的。所以紧随其后逻辑与的命令会执行"
该命令的效果如下:
可用的整数比较符号如下:
运算符 | 作用 |
---|---|
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
测试用的命令如下:
# 如果参数1(10)等于参数2(10)为真,就在终端打印echo后的内容
[ 10 -eq 10 ] && echo "10等于10"
# 如果参数1(10)大于参数2(10)为真,就在终端打印echo后的内容
[ 10 -gt 8 ] && echo "10大于8"
# 如果参数1(10)小于参数2(8)为假,就在终端打印echo后的内容
[ 10 -lt 8 ] || echo "10小于8"
该命令的效果如下:
常见的字符串比较运算符如下:
运算符 | 作用 |
---|---|
= | 比较字符串是否相同 |
!= | 比较字符串是否不同 |
-z | 判断字符串是否为空 |
测试用的命令如下:
# 定义了变量STR,其值为abc
STR="abc"
# 如果变量STR的值为abc,就在终端打印echo后的内容
[ $STR = "abc" ] && echo "变量STR的值为abc"
# 如果变量STR的值不为cba,就在终端打印echo后的内容
[ $STR = "cba" ] || echo "变量STR的值为cba"
# 如果变量STR不为空,就在终端打印echo后的内容
[ -z $STR ] || echo "变量STR不为空"
该命令的效果如下: