shell使用(上)


'''
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天  单位不同
'''



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值