Shell脚本下(8)

简介: 先看下要实现的效果

先看下要实现的效果


1. sh find_api.sh -d ./mm.xcframework -s -f -lib --keyword "main"
   a. -d -> 路径
   b. -s -> 搜索源码
   c. -f  -> 搜索framework
   d. -lib -> 搜索.dylib
   e. --keyword -> 代表要搜索的关键字, --开头,是代表长参数
      ⅰ. -k -> 小参数
      ⅱ. sh find_api.sh -d ./mm.xcframework -s -f -lib --keyword "main" -k "weak" -> 支持多关键字,长参数/短参数都支持

01 参数解析


find_api.sh


  1. shell对于我们的终端来说,像一个大的函数,后面通过空格来传参


  1. echo "$# -- $@" -> 打印一下看看传入的参数
  2. $1 -> 第一个参数


  1. $0 -> 默认是文件本身


  1. case的条件支持正则/通配符


  1. | -> 正则表达式
  2. 仔细看例子中条件 -> 这种写法就是长参数/短参数都识别的逻辑


  1. while -> 将所有参数循环拿到(注意while条件写法以及空格)


  1. -gt:大于
  2. shift命令可使参数向右发生位移,每次调用shift时,它将所有位置上的参数减一。
  3. *) -> 其他参数未识别


  1. exit 0 -> 正常退出
  2. exit 1 -> 代表发生的错误


02 -help输出与cat命令


find_api_help输出与cat命令.sh


  1. 正规的脚本,帮助信息很完善


  1. man echo
  2. find --help


  1. cat <<EOF -> 结束符 -> 输入相应的字符串结束标准输入的状态


  1. 结束符要顶格写
  2. 也可以用命令符来包括以下local help=$(cat <<EOF  EOF),不过建议使用第一种方法(顶格)


03 find命令与grep命令


find_api命令与grep命令.sh


  1. find命令 -> 具体看文档


1. find ./mm.xcframework -name "*.framework" -> -name -> 要查找的指定内容
2. find ./mm.xcframework ( -name "*.framework" -o -name "*.o")
   1. 第二个\是没有的,因为macdown语法
3. find ./mm.xcframework ( -name "*.framework" -o -name "*.o") -exec echo {} ;
  1. grep命令 -> 具体看文档


1. grep -E "Some|weak"
   1. grep 查找大小写敏感 -> -i 来声明一下就可以大胸写不敏感
   2. -E -> 正则表达式声明
   3. grep -E "Some|weak" ./mm.xcframework/test.m
  1. 核心命令展示


微信图片_20220510014341.png
命令融合


04 数组for循环与read


find_api数组for循环与read.sh


  1. : -> 占位符


微信图片_20220510014346.png
占位符


  1. KEYWORK变量声明 -> 为了拿到所有传进来的key参数


05 read与while read


find_api read与while read.sh


  1. 字符串里面有空格会出问题
  2. read -> 含义


  1. read -a
  2. <
  3. <<
  4. <<< 相应的含义查看注释


  1. while read


  1. 获取参数传到Find_Api里面之前, 字符串 + \n
  2. read是管道, 管道里面写的变量会出问题 -> 请看3
  3. 子Shell里面定义的变量, 父Shell是拿不到的


06 通配符扩展与find命令


find_api通配符扩展与find命令.sh

  1. 首先记住一点, 不加引号的 * 首先会被bash进行扩展,所以 find . -name test* 在执行 find 命令前,bash先把 test* 替换成了 test1 test2 ... 然后 find 命令看到的参数实际上是 test1 test2 ..., 加了引号,bash就不去做替换了,那么 find 命令看到的参数就是  test*
  2. set -x -> 写在命令行前, 能打印出下一行执行的真正命令
  3. 又使用到了read来最终解决问题
  4. 进入了一个进退两难的底部, 加上"" -> '""' -> 会被认为是一个字符串


  1. 不加 -> 会提前被sh扩展替换
  2. eval -> 扫码两边就可以解决


  1. 文件夹的名字有空格 -> 容易被空格分隔来当成多个参数 -> 用While read解决
  2. -d -> 判断是否是一个目录


  1. $(basename "") -> 获取路径最后的参数
  2. "${name/.framework/ds}" -> 找到.framework之后用ds来替换
  3. 所以最终这样写 -> nm -pa ${name/.framework}" -> 因为找到的是name
  4. nm -pa ${name/.framework}" | grep -E "$key_word" -> -E 后面是正则
  5. pushd/popd -> pushd/popd输出有干扰 -> > /dev/null ,重定位到一个黑洞


三个问题


  1. -k "weak" "cat" -> 一个关键字后面拼上多个参数
  2. 搜索组合比较繁琐, 怎么改进
  3. find -exec -> -exec 后面直接拼脚本 -> 来避免使用while read




目录
相关文章
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
86 1
|
25天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
48 2
6种方法打造出色的Shell脚本
|
12天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
33 1
|
16天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
37 2
|
30天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
49 6
|
27天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
70 12
|
1月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
60 2
|
2月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
556 2