shell笔记

 反引号里面的内容会被当做命令执行

 查看python的目录,which python

 r:read  读的权限
 w:write 写的权限
 x       执行权限
 chmod +x 1.sh(文件名)

 @,*都可以表示一个数组里的全部,区别在于,*加上双引号之后会被当作字符串处理,@加上双引号之后依然是数组

 echo -e开启转译

 \b,表示删除b前一个字符

 echo $?之前的语句执行是否正确,0表示true,非0表示false

 bash不支持有浮点数的除法运算
 如果要计算,awk 'BEGIN{print 2/3}'

 s="hello from testerhome"
 echo ${s:6:3},表示从第6个单位开始,向后打印3个单位
 echo ${#s}表示计算长度

 掐头#
 echo ${s#hello}表示去掉hello
 echo ${s#*m}表示去掉匹配到第一个m
 echo ${s##*m}表示贪婪匹配,一直匹配到所有m,去掉

 去尾%
 echo ${s%home}表示去尾home
 echo ${s%h*}*表示通配符
 echo ${s%%o*}表示去尾的贪婪匹配,从后往前,一直去掉最后一个o

 字符串替换
 echo ${s/testerhome/seveniruby}将testerhome替换为seveniruby
 echo ${s//h/xxx}表示将所有的h替换为xxx,贪婪匹配

 算数判断
 [ 2 -eq 2 ]相等
 [ 2 -ne 2 ]不等
 [ 3 -gt 1 ]大于
 [ 3 -ge 3 ]大于等于
 [ 3 -lt 4 ]小于
 [ 3 -le 3 ]小于等于
 (())也可以表示算数比较。((10>=8)),((10==10))

 字符串比较
 [ string1 = string2 ]如果两字符相等,则结果为真
 [ string1 != sring2 ]如果两字符不相同,则结果为真
 [ -n string ]        如果字符串非空,则结果为真
 [ -z string ]        如果字符串为空,则结果为真

 逻辑与的两种表示
 [ 2 -ge 1 -a 3 -ge 4 ]    2>=1 与 3>=4
 [[ 2 -ge 1 && 3 -ge 4 ]]  2>=1 与 3>=4

 逻辑或的两种表示
 [ 2 -ge 1 -o 3 -ge 4 ]    2>=1 或 3>=4
 [[ 2 -ge 1 || 3 -ge 4 ]]  2>=1 或 3>=4

 逻辑非
 [ ! 2 -ge 1 ]

 echo "1" && echo "2" || echo "3" && echo "4" || echo "5" || echo "6" && echo "7" && echo "8" || echo "9"
 1
 2
 4
 7
 8
 ||要前面执行的为false才会执行,&&执行过后一直为true

 ctrl+r可以搜索之前输入的命令,再一次按ctrl+r过滤你想要搜索的命令

 .bash_history里面有输入过的命令

 for条件循环
 for(());do;done

 for遍历循环读取文件名字的时候,如果文件名有空格的时候,会变成两个。
 for x in *;do echo $x;done

 read命令:接收一个标准命令

 continue 结束本次循环

 shell前后台切换:
 1.echo $$打印当前进程号
 2.()在括号里运行的是子shell
 3.command& 让进程在后台运行
 jobs 查看后台运行的进程
 bg[]到后台,fg[]到前台,输入jobs命令查看到的job编号


 2>$1 
 几个基本符号及其含义
 /dev/null 表示空设备文件
 0 表示stdin标准输入
 1 表示stdout标准输出
 2 表示stderr标准错误

 
 输出重定向
 >>输出重定向,两个箭头不会覆盖,一个箭头会覆盖

 输入重定向
 while read k;do echo $k;done < baidu.keywork

 curl命令 利用URL规则在命令行下工作的文件传输工具,支持文件的上传和下载
 -s不显示统计信息

 grep命令
 -o精准匹配 -i忽略大小写 -io 可以放到一起用
 grep -E 选项可以用来扩展选项为正则表达式。 如果使用了grep 命令的选项-E,则应该使用 | 来分割多个pattern,以此实现OR操作
 -A -B -C 后面都跟阿拉伯数字 
 -A是显示匹配后和它后面的n行。 
 -B是显示匹配行和它前面的n行。 
 -C是匹配行和它前后各n行。 

 例子(需要提前创建baidu.keyword文件):
 1.while read k;do echo $k;curl http://www.baidu.com/s?wd=$k;done < baidu.keyword
 2.while read k;do echo $k;curl http://www.baidu.com/s?wd=$k;done < baidu.keyword | grep -o "结果约[0-9,]*."
 3.while read k;do echo $k;curl -s http://www.baidu.com/s?wd=$k | grep -o "结果约[0-9,]*" | grep -o "[0-9]*" | while read x;do printf $x;done;echo;done < baidu.keyword

 正则表达式
 . 一个字符
 * 0个或者多个字符

 awk
 RS ⾏记录分隔符
 FS 字段分隔符
 echo $PATH | awk 'BEGIN{FS=":"}{print $1}'
 NR 记录数
 NF 字段数
 
 echo $PATH | awk 'BEGIN{RS=":"}{print $0}'
 echo $PATH | awk 'BEGIN{RS=":"}{print NR,$0}'
 echo $PATH | awk 'BEGIN{RS=":"}END{print NR}'
 echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk -F/ '{print $1,$2,$3,$4}'
 示例:
 1.去掉第一行的显示
 (vmstat显示Linux系统虚拟内存状态)
 vmstat | awk 'NR>1'
 
 通过正则表达式的方法,打印从01到04的数据
 2.awk  '/00:00:01/,/00:00:04/' /tmp/nginx.log
 
 sed
 -e :可以指定多个表达式
 -n :只打印模式匹配的行

 例子1 将abc变为_
 echo 123abc456 | sed 's#abc#_#'

 例子2 将数字2-9替换为x,#g表示全部替换,不加只替换第一个
 echo 123abc456  | sed 's#[2-9]#x#g'

 -n和p一起使用
 sed -n '/00:00:01/,/00:00:04/p' /tmp/nginx.log

 【shell实战】
 1. 找出log中的404 500的报错
  答案1:grep -E " 404 | 500 " /tmp/nginx.log
  (404和500需要加,不加空格的话,会检索到其他请求包含404和500的请求)

  (sort可以对数据进行排序)
  awk '{print $9}' /tmp/nginx.log | sort | uniq -c |less
 
  答案2:
  只显示第9部分
  awk '$9=="404"{print $9}' /tmp/nginx.log
  打印整个内容
  awk '$9=="404"' /tmp/nginx.log
  支持正则表达式的用法
  awk '$9~/500/' /tmp/nginx.log | less

 2. 找出500错误数据行的前10条非500的数据
  grep -B 10 "500 " /tmp/nginx.log

 3. 找出访问量最高的ip
 uniq 命令删除文件中的重复行  -c 在输出行前面加上每行在输入文件中出现的次数
 sort 将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序
 -n   依照数值的大小排序
 -r   以相反的顺序来排序

 head -10000 /tmp/nginx.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -5

 4. 找出访问量最高的页面地址
 精简版:
 awk '{print $7}' /tmp/nginx.log | sed 's#[0-9]#_#g' | sort |uniq -c|sort -nr|head -10
 标准版:
 awk '{print $7}' /tmp/nginx.log |sed -e "s#[0-9]\{1,\}#*#g" -e 's#?.*##' -e 's#/[^/]*\.png.*##'|  sort | uniq -c | sort -nr |head -10

 netstat用于显示各种网络相关信息
 -n 拒绝显示别名,能显示数字的全部转化成数字。(重要)
 -t (tcp)仅显示tcp相关选项
 -p 显示正在使用Socket的程序识别码和程序名称
 
 wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出
 -l 统计行数
 
 vmstat 显示Linux系统虚拟内存状态(查看的是整个服务器的)
 vmstat delay 刷新时间间隔。如果不指定,只显示一条结果
 (vmstat 1)
 
 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析
 top-p只查看特定进程

 ps命令查看进程列表
 ps -ef    显示所有用户进程,完整输出
 ps -aux 显示所有包含其他使用者的行程
 ps -o %cpu $$ 查看当前进程的cpu信息,$$表示当前进程
 
 time命令的用途,在于量测特定指令执行时所需消耗的时间及系统资源等资讯

 【Linux测试】
 5. 文件检索 在特定目录下找到包含特定debug的数据或者代码

 6. 网络统计 统计当前机器的连接数 查看当前开放的端口和进程
  netstat -tn | grep ":22" | wc -l
  netstat -ntp | grep 22 | sort | uniq -c | wc -l

 7. 性能统计 统计某个进程的cpu和mem的增长情况 打印三列数据 时间 cpu mem
 先查找到进程的pid
 ps -ef | grep -i 名称
 (9081 pid)
 for i in $(seq 1 20);do time=$(date +%H:%M:%S);  info=$(ps -o %cpu -o %mem 9081 | tail -1 );echo $time $info ;sleep 1;done

 8. 任务处理 使用简易的工具对第三方服务做加压并统计性能
 while true; do count=$(jobs -l | grep Running|wc -l); [ $count -le 5 ] && { time curl https://testerhome.com/topics/17870 &>/dev/null  & } || echo $count waiting ;done

 【App测试】
 9. apk文件分析 分析app的文件内容检索特定的api调用

 10. 分析api的调用序列 app性能分析
 adb shell
 ps | grep com.tencent.mobileqq
 
 11. 统计某个app的一段时间内的性能

 12. 自动化测试 编写一个自动遍历工具

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值