shell脚本知识点记录

一、

序号 参数 说明1 a = b 如果string1等于string2,则为真2 string1 != string2 如果string1不等于string2,则为真

二、

  • if [ -d "/path/to/directory" ]; then:检查 /path/to/directory 是否为目录。
  • if [ -f "/path/to/file" ]; then:检查 /path/to/file 是否为普通文件。
  • if [ -z "$my_string" ]; then:检查 $my_string 是否为空字符串

三、$在脚本中的作用?

举个例子:

  • $$:当前 shell 的进程 ID。
  • $0:脚本的名称。
  • $1, $2, ...:传递给脚本的参数。
  • $#:传递给脚本的参数个数。
  • $*:所有传递给脚本的参数作为一个字符串。
  • $@:所有传递给脚本的参数,每个参数作为一个单独的字符串。
  • $?:上一个命令的退出状态。
算术运算

可以使用 $(( )) 来进行数学计算。

变量引用

当 $ 放在变量名前面时,表示引用该变量的值。

命令替换

当 $ 与 ( ) 或者 ````` 结合使用时,表示命令替换,即执行括号内的命令并将结果作为值。

四、awk -F '=' '{print $2}'

  1. 分隔字段:

    • awk -F '=' 指定 = 作为字段分隔符。
  2. 打印第二个字段:

    • {print $2} 打印每行的第二个字段。

五、 if [[ "$filename" =~ \.(bin|rbf|tar.gz)$ ]];

  1. [[ ... ]]:

    • 这是一个扩展的条件测试语法,提供了更多的功能和更好的可读性。
    • 与 [ ... ] 不同,[[ ... ]] 不会进行单词拆分和文件名扩展,因此更安全。
  2. =~:

    • 这是正则表达式匹配操作符。[[ ... =~ ... ]] 用于检查左边的字符串是否匹配右边的正则表达式。

    • [[ "$filename" =~ \.(bin|rbf|tar\.gz)$ ]] 使用正则表达式匹配文件名的扩展名。

    • 相当于

      复制代码
      [ "$filename" == *.bin ] || [ "$filename" == *.rbf ] || [ "$filename" == *.tar.gz ];
  3. \.(bin|rbf|tar.gz)$:

    • 这是一个正则表达式,用于匹配文件名的扩展名。
    • \. 匹配点号 .。
    • (bin|rbf|tar.gz) 是一个括号表达式,表示匹配 bin、rbf 或 tar.gz 中的任何一个。
    • $ 表示字符串的结尾,确保匹配的是文件名的最后一个部分。
  4. grep -oE '^\^=+=.*\.(bin|tar.gz)' "$PATH/test.ini" > copy.txt

-o 选项表示只输出匹配的部分,而不是整行。

-E 选项表示使用扩展正则表达式(Extended Regular Expressions)。这样可以使用更复杂的正则表达式语法。

^[^=]+=.*\.(bin|rbf|tar.gz)'这是一个正则表达式,用于匹配特定模式的行。

  • ^:表示行的开始。
  • [^=]+ :匹配一个或多个非等号 = 的字符。这部分用于匹配等号前面的部分。
  • = :匹配等号 =。
  • .*:匹配任意数量的任意字符。这部分用于匹配等号后面的部分。
  • \.(bin|rbf|tar.gz) :匹配以 .bin、.rbf 或 .tar.gz 结尾的字符串。
    • \. :匹配点号 .。
    • (bin|rbf|tar.gz) :匹配 bin、rbf 或 tar.gz。
相关推荐
江屿风1 小时前
【Plain Language Large Model】【从麦当劳点餐到Redis接入:MCP如何让AI工具集成变简单】流食般投喂
人工智能·redis·笔记·语言模型·llm·mcp
海绵宝宝转agent2 小时前
Leetcode二叉树算法个人理解
笔记·学习·算法·leetcode·深度优先
小oo呆2 小时前
【学习心得】MCP工具开发学习笔记
笔记·学习
2601_961146202 小时前
实验室用等离子表面处理设备处理汽车PP内饰件和PBT骨架的一点记录
笔记·汽车·设备
二十七日秋3 小时前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
星恒随风3 小时前
Linux Socket TCP编程(二):逐文件重构多进程、多线程与线程池服务器,深入fork、pthread_create、popen和std::bind
linux·服务器·笔记·学习·tcp/ip
hkNaruto4 小时前
【AI】深度学习、强化学习、深度强化学习基础概念笔记
人工智能·笔记·深度学习
无心水4 小时前
15、云原生架构设计理论与实践 核心考点与学习笔记
笔记·学习·云原生·架构师·软考·系统架构设计师·软考系统架构设计师
动词ing5 小时前
【学习笔记】51单片机 独立按键控制LED显示二进制
笔记·学习·51单片机
叼烟扛炮5 小时前
Linux 学习笔记(三十九):网络基石——TCP/IP 模型与 UDP 实战
linux·运维·网络·笔记·学习·tcp/ip