目录一、Bash 脚本基础从 Hello World 开始1. Shebang脚本的 “身份证”2. 执行脚本权限与路径3. 输出与重定向二、特殊字符与引号避免 Shell 误解1. 反斜杠 \转义字符2. 单引号 强引用3. 双引号 弱引用三、脚本控制流让脚本 “思考” 和 “重复”1. 循环处理重复性任务2. 退出代码脚本的 “红绿灯”3. 条件判断if 语句四、正则表达式文本处理的 “瑞士军刀”1. 基础元字符2. 扩展元字符需使用 grep -E 或 egrep3. 在 Shell 中使用正则表达式的注意事项总结一、Bash 脚本基础从 Hello World 开始1. Shebang脚本的 “身份证”脚本的第一行#!/bin/bash是一个特殊标记称为shebang或hash-bang。它告诉操作系统这个文件需要用/bin/bash这个解释器来执行而不是当作普通文本或其他 shell 脚本。2. 执行脚本权限与路径赋予执行权限脚本文件必须有执行权限才能运行使用chmod x scriptname来添加。运行脚本如果脚本在$PATH环境变量列出的目录中如~/bin直接输入脚本名运行hello。如果不在$PATH中使用绝对路径或相对路径运行./hello或/home/user/bin/hello。$PATH是一个环境变量它定义了 Shell 查找可执行文件的目录顺序。当你输入ls时Shell 会按顺序在这些目录中查找ls命令。3. 输出与重定向echo是最基础的输出命令默认将文本发送到标准输出STDOUT即屏幕。你也可以使用重定向将输出发送到文件或其他位置# 输出到屏幕 echo Hello, world # 输出重定向到文件覆盖 echo Hello, world output.txt # 追加到文件 echo Another line output.txt # 将错误信息输出到标准错误STDERR与正常输出隔离 echo ERROR: Something went wrong 2二、特殊字符与引号避免 Shell 误解在 Bash 中许多字符如$,*,#有特殊含义。当你需要使用它们的字面意思时就需要用到转义或引号。1. 反斜杠\转义字符反斜杠可以 “取消” 其后单个字符的特殊含义。# 输出 # 而不是被当作注释 echo \# not a comment # 输出: # not a comment2. 单引号 强引用单引号会保留其中所有字符的字面含义包括$、\等Shell 不会对其进行任何扩展。echo $PATH is a variable # 输出: $PATH is a variable3. 双引号 弱引用双引号会阻止文件名扩展globbing和 shell 扩展但允许变量替换和命令替换。NAMEAlice echo Hello, $NAME # 输出: Hello, Alice三、脚本控制流让脚本 “思考” 和 “重复”1. 循环处理重复性任务for循环是 Bash 中最常用的循环结构用于遍历列表中的每一项。# 遍历主机名列表 for HOST in host1 host2 host3; do echo Checking $HOST... done # 遍历当前目录下的所有 .txt 文件 for FILE in *.txt; do echo Found file: $FILE done2. 退出代码脚本的 “红绿灯”每个命令执行后都会返回一个退出代码$?。0表示成功非0表示失败。你可以在脚本中使用exit N来主动返回一个代码。#!/bin/bash echo Hello exit 0 # 明确表示脚本执行成功3. 条件判断if语句使用if/then/else结构让脚本根据条件执行不同的代码块。常见的测试包括数字比较-gt(大于),-lt(小于),-eq(等于)字符串比较(等于),!(不等于)文件测试-f(文件存在),-d(目录存在),-x(可执行)# 检查服务是否运行如果没运行则启动 if [ $(systemctl is-active httpd) ! active ]; then sudo systemctl start httpd fi四、正则表达式文本处理的 “瑞士军刀”正则表达式Regex是一种强大的文本模式匹配语言广泛用于grep、sed、vim等工具中。1. 基础元字符^匹配行首。^cat匹配以cat开头的行。$匹配行尾。cat$匹配以cat结尾的行。^cat$精确匹配整行就是cat。.匹配任意单个字符。c.t可以匹配cat,cut,c9t。*匹配前一个字符零次或多次。a*匹配空、a,aa,aaa...2. 扩展元字符需使用grep -E或egrep匹配前一个字符一次或多次。?匹配前一个字符零次或一次。{n,m}匹配前一个字符至少n次最多m次。|逻辑或匹配|两边任意一个模式。3. 在 Shell 中使用正则表达式的注意事项使用单引号正则表达式中常包含$、*等 Shell 元字符用单引号括起可以避免 Shell 提前解释它们。区分工具grep默认使用基本正则表达式BRE要使用扩展正则表达式ERE需加-E选项。# 使用 grep 查找所有以 root 开头的行 grep ^root /etc/passwd # 使用扩展正则表达式查找 3 到 5 个连续的数字 grep -E [0-9]{3,5} data.txt总结Bash 脚本和正则表达式是 Linux 世界的两把利刃Bash 脚本让你能够自动化重复的系统管理任务将一系列命令组合成强大的工作流。正则表达式则让你在海量文本中精准地查找、提取和替换信息。
【RH134总结】 一
目录一、Bash 脚本基础从 Hello World 开始1. Shebang脚本的 “身份证”2. 执行脚本权限与路径3. 输出与重定向二、特殊字符与引号避免 Shell 误解1. 反斜杠 \转义字符2. 单引号 强引用3. 双引号 弱引用三、脚本控制流让脚本 “思考” 和 “重复”1. 循环处理重复性任务2. 退出代码脚本的 “红绿灯”3. 条件判断if 语句四、正则表达式文本处理的 “瑞士军刀”1. 基础元字符2. 扩展元字符需使用 grep -E 或 egrep3. 在 Shell 中使用正则表达式的注意事项总结一、Bash 脚本基础从 Hello World 开始1. Shebang脚本的 “身份证”脚本的第一行#!/bin/bash是一个特殊标记称为shebang或hash-bang。它告诉操作系统这个文件需要用/bin/bash这个解释器来执行而不是当作普通文本或其他 shell 脚本。2. 执行脚本权限与路径赋予执行权限脚本文件必须有执行权限才能运行使用chmod x scriptname来添加。运行脚本如果脚本在$PATH环境变量列出的目录中如~/bin直接输入脚本名运行hello。如果不在$PATH中使用绝对路径或相对路径运行./hello或/home/user/bin/hello。$PATH是一个环境变量它定义了 Shell 查找可执行文件的目录顺序。当你输入ls时Shell 会按顺序在这些目录中查找ls命令。3. 输出与重定向echo是最基础的输出命令默认将文本发送到标准输出STDOUT即屏幕。你也可以使用重定向将输出发送到文件或其他位置# 输出到屏幕 echo Hello, world # 输出重定向到文件覆盖 echo Hello, world output.txt # 追加到文件 echo Another line output.txt # 将错误信息输出到标准错误STDERR与正常输出隔离 echo ERROR: Something went wrong 2二、特殊字符与引号避免 Shell 误解在 Bash 中许多字符如$,*,#有特殊含义。当你需要使用它们的字面意思时就需要用到转义或引号。1. 反斜杠\转义字符反斜杠可以 “取消” 其后单个字符的特殊含义。# 输出 # 而不是被当作注释 echo \# not a comment # 输出: # not a comment2. 单引号 强引用单引号会保留其中所有字符的字面含义包括$、\等Shell 不会对其进行任何扩展。echo $PATH is a variable # 输出: $PATH is a variable3. 双引号 弱引用双引号会阻止文件名扩展globbing和 shell 扩展但允许变量替换和命令替换。NAMEAlice echo Hello, $NAME # 输出: Hello, Alice三、脚本控制流让脚本 “思考” 和 “重复”1. 循环处理重复性任务for循环是 Bash 中最常用的循环结构用于遍历列表中的每一项。# 遍历主机名列表 for HOST in host1 host2 host3; do echo Checking $HOST... done # 遍历当前目录下的所有 .txt 文件 for FILE in *.txt; do echo Found file: $FILE done2. 退出代码脚本的 “红绿灯”每个命令执行后都会返回一个退出代码$?。0表示成功非0表示失败。你可以在脚本中使用exit N来主动返回一个代码。#!/bin/bash echo Hello exit 0 # 明确表示脚本执行成功3. 条件判断if语句使用if/then/else结构让脚本根据条件执行不同的代码块。常见的测试包括数字比较-gt(大于),-lt(小于),-eq(等于)字符串比较(等于),!(不等于)文件测试-f(文件存在),-d(目录存在),-x(可执行)# 检查服务是否运行如果没运行则启动 if [ $(systemctl is-active httpd) ! active ]; then sudo systemctl start httpd fi四、正则表达式文本处理的 “瑞士军刀”正则表达式Regex是一种强大的文本模式匹配语言广泛用于grep、sed、vim等工具中。1. 基础元字符^匹配行首。^cat匹配以cat开头的行。$匹配行尾。cat$匹配以cat结尾的行。^cat$精确匹配整行就是cat。.匹配任意单个字符。c.t可以匹配cat,cut,c9t。*匹配前一个字符零次或多次。a*匹配空、a,aa,aaa...2. 扩展元字符需使用grep -E或egrep匹配前一个字符一次或多次。?匹配前一个字符零次或一次。{n,m}匹配前一个字符至少n次最多m次。|逻辑或匹配|两边任意一个模式。3. 在 Shell 中使用正则表达式的注意事项使用单引号正则表达式中常包含$、*等 Shell 元字符用单引号括起可以避免 Shell 提前解释它们。区分工具grep默认使用基本正则表达式BRE要使用扩展正则表达式ERE需加-E选项。# 使用 grep 查找所有以 root 开头的行 grep ^root /etc/passwd # 使用扩展正则表达式查找 3 到 5 个连续的数字 grep -E [0-9]{3,5} data.txt总结Bash 脚本和正则表达式是 Linux 世界的两把利刃Bash 脚本让你能够自动化重复的系统管理任务将一系列命令组合成强大的工作流。正则表达式则让你在海量文本中精准地查找、提取和替换信息。