'''
1.shell命令(变量)
$:声明一个变量
echo 显示
echo $SHELL 显示shell路径
bash 执行.sh的shell文件
bash first_shell.sh
linux发行版: ubuntu centos(yum install ) redhat kali渗透测试,黑客攻击软件预安装,可以玩一下
脚本:单行注释 : # 多行注释 : :<<! 注释内容 !(或者!换成@)
脚本执行方式:
(1)bash 执行,脚本中需要声明bash解释器的路径, 即 #! /bin/bash (跟python相同道理,命令行python 文件.py,文件中 #! /usr/bin/env python)
(2)添加执行权限 chmod +x 文件名 使用 ./文件名.sh
(3)source 文件.sh 加载文件中信息到当前终端,统一环境变量配置时使用
变量:=两边没空格 本地变量 全局变量 内置变量
本地变量=局部变量
格式化输出:使用双引号 " $变量名 ",单引号''不支持
key=hello value="$key world"
命令变量:给变量赋值命令,使用``符号,即~这个键位
(1)data=`ls` echo $data 即执行了ls命令
(2)data=$(ifconfig) echo $data 即执行ifconfig命令
全局变量
查看env
把变量修改成全局变量 export 变量名
取变量:
$变量名 "$变量名" ${变量名} "${变量名}" 都可以拿出来
删除变量:
unset 变量名
只读变量:
readonly 变量名
内置变量:
$0 : 当前脚本名称
$# : 获取当前脚本执行时的参数总个数
$n : 获取当前脚本执行时第n个参数 涉及到命令行传参,执行脚本的时候添加传入参数 bash 脚本.sh 参数1 参数2
$? : 上一次命令的执行情况,0表示成功
$$ : 脚本运行时的进程号
$@ : 所有参数的列表
'''
'''
2.shell命令(表达式)
切片: ${变量名:start:n} start从哪开始(0:从头) n切几个 从尾开始: ${变量名:0-n}
如果没有重新赋值,那使用默认值的格式
data=$1 取1号位置的传参
${data:-python}如果没传参使用默认值 python,传参了重新赋值
${data:+python}就算你传参了,也使用默认值
测试表达式 结合$?查看执行情况来使用
(1)[ 测试表达式 ] : [] 和 表达式必须有空格隔开
(2)test 测试表达式
$data=1
[ $data -gt 5 ] (1>5)
$? 结果:不是0,执行不成功
逻辑表达式
命令1 && 命令2 满足命令1才执行命令2
命令1 || 命令2 满足命令1就不执行命令2,不满足才执行
文件表达式
-e 判断是否存在
-f 判断是否是文件 filename=$1 [ -f ${filename} ] && echo "${filename}是一个文件"
-d 判断是否是文件夹
-x 判断是否可执行 filename=$1 [ -x ${filename} ] && bash ${filename}
-r 判断是否可读
-w 判断是否可写
[ 命令 文件名 ]
数值表达式
-gt 大于
-lt 小于
-eq 等于
-ne 不等
字符串表达式
== 相等
!= 不等
-z 是否为空
-n 是否不为空
计算表达式 只能 + - * /
(1)$((计算表达式))
(2)let 计算表达式
n=0 n=$(($n+1)) echo $n
let比较灵活 let n=n+1 或者 let n+=1
'''
'''
3.shell命令
重定向:
> 覆盖
>> 追加
把输出信息使用重定向到文件中 1:未报错信息 2:报错信息
bash 文件.sh >> 文件名.txt 2>&1 (默认重定向只保存未报错)
&: 很重要
实际部署后,运行web,加一个&符号让web在新进程中运行
sleep 5 & : 开启一个进程让进程等待5秒
/dev/null:不需要的显示信息可以重定向到垃圾桶中
echo python-1TB >> /dev/null
grep 选项 内容 文件 grep -n a 文件.txt 文件中含有a的行数
-c:统计个数
-n:显示行数
-v:取反,不含有
'''
'''
4.shell命令(sed)
重点: sed 文本编辑工具
格式: sed 选项参数 "行号行为#查询条件#修改后内容#列号(如果不指定就是第一列,g:每一列)" 文件名 或者把# 换成 /
参数: -i 保存修改结果到文件
行为:
s:替换 sed -i "s#nihao#python#" 文件名 把文件中的每一行的第一列匹配到的nihao替换成python并保存 (涉及到行号列号问题)(一行中可能匹配到多个nihao,只修改第一列(个))
sed "1,2s#nihao#python#2" 文件名 把文件中第1,2行匹配到的nihao替换成python,第二列(个) 即如果匹配到nihao nihao nihao 只改第二个
d:删除
sed -i '行号d'
i:插入在行前
sed -i '行号i插入内容'
a:追加在行后
sed -i '行号a追加内容'
'''
'''
5.shell命令(awk)
重点: awk 文本编辑工具
格式: awk 参数 "显示内容" 文件名
参数: -F 指定分隔符 -F : 符合linux命令格式以空格隔开,以:作为分隔符把1个字符串整体分割 nihao:1:2:3:4
显示内容的方法:
NR : 行号
{ print 显示 $0 当前行的所有内容 }
$n 指定列的所有内容
awk 'NR==1 { print $1,$3 }' 文件名 显示第1行第1列和第3列的所有内容,注意必须使用单引号
'''
'''
6.shell命令(find)
重点: find
格式: find 路径 选项 查询条件(结合通配符)
选项:
-name 以名字查询
-perm 以文件权限查询
-user 以文件所属查询
-type 以文件类型查询 f:文件 d:文件夹
-size 以字节大小查询 数字c:35c 35字节 +35c:大于35字节 -35c:小于35字节
-mmin 在指定时间内修改过内容 n分钟 -7:7分钟内 +7:7分钟以外
-cmin 在指定时间内修改过权限 n分钟
-amin 在指定时间内访问过 n分钟
-mtime 在指定时间内修改过内容 n天 单位不同
'''