美文网首页
Shell脚本下(8)

Shell脚本下(8)

作者: 为了自由的白菜 | 来源:发表于2021-06-15 09:16 被阅读0次

先看下要实现的效果

  1. sh find_api.sh -d ./mm.xcframework -s -f -lib --keyword "main"
    1. -d -> 路径
    2. -s -> 搜索源码
    3. -f -> 搜索framework
    4. -lib -> 搜索.dylib
    5. --keyword -> 代表要搜索的关键字, --开头,是代表长参数
      1. -k -> 小参数
      2. 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 -> 默认是文件本身
    3. case的条件支持正则/通配符
      1. | -> 正则表达式
      2. 仔细看例子中条件 -> 这种写法就是长参数/短参数都识别的逻辑
    4. 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
  2. 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 {} ;
  2. grep命令 -> 具体看文档
    1. grep -E "Some|weak"
      1. grep 查找大小写敏感 -> -i 来声明一下就可以大胸写不敏感
      2. -E -> 正则表达式声明
      3. grep -E "Some|weak" ./mm.xcframework/test.m
  3. 核心命令展示 命令融合

04 数组for循环与read

find_api数组for循环与read.sh

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

05 read与while read

find_api read与while read.sh

  1. 字符串里面有空格会出问题
  2. read -> 含义
    1. read -a
    2. <
    3. <<
    4. <<< 相应的含义查看注释
  3. 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 -> 扫码两边就可以解决
  5. 文件夹的名字有空格 -> 容易被空格分隔来当成多个参数 -> 用While read解决
  6. -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

相关文章

  • Shell脚本下(8)

    先看下要实现的效果 sh find_api.sh -d ./mm.xcframework -s -f -lib -...

  • shell脚本的常用循环

    1 shell脚本简介 在简单介绍shell脚本(shell script)之前,先简单介绍一下shell。 1....

  • Linux Shell 脚本编写学习

    shell脚本 Shell Script,Shell脚本与Windows/Dos下的批处理]相似,也就是用各类命令...

  • 把Shell脚本设置为系统命令

    Shell : hello world 编写shell脚本 将shell脚本设置为在任意路径下可执行的命令 1. ...

  • mac终端下运行shell脚本

    From: 在mac下编写shell脚本并执行 一些资料 Shell教程-for 菜鸟教程 Shell脚本编程30...

  • 第四单元 Shell脚本

    一、Shell介绍 1、什么是shell脚本 Shell脚本与Windows/Dos下的批处理相似,也就是用各类命...

  • shell脚本

    一、Shell介绍 1、什么是shell脚本 Shell脚本与Windows/Dos下的批处理相似,也就是用各类命...

  • Shell__脚本中的操作符

    记录一下 Shell 脚本中比较符号的使用,在写 Shell 脚本时方便查询 。 算术比较符 Shell 表示中文...

  • Shell脚本(下)

    条件判断 if语句 if else if elif else 命令的退出状态 每一条 Shell命令,不管是 Ba...

  • Shell入门笔记

    Shell脚本:Linux Shell脚本学习指南菜鸟教程 - Shell教程Linux入门 - Shell脚本是...

网友评论

      本文标题:Shell脚本下(8)

      本文链接:https://www.haomeiwen.com/subject/inxgeltx.html