[TOC]

语法

if 条件语句

  • if:用于执行一个命令并根据其退出状态码执行不同的操作。
  • $(if $(KBUILD_OUTPUT),, ...): 这是一个条件判断语句。(if ...) 函数的语法是 $(if condition, then-part, else-part)如果 condition 为真,则执行 then-part;否则,执行 else-part
  • 环境变量

shift 命令用于移动参数

  • shift 命令用于移动参数。它会将所有参数左移一个位置,即 $2 的值赋给 $1$3 的值赋给 $2,以此类推。$1 的值会被丢弃,而 $0(脚本名称)不会受到影响。

local 命令用于声明局部变量

${parameter+word} 用于检查变量是否已经定义

  • 一种参数替换语法,用于检查变量是否已设置并根据结果返回不同的值。以下是对这种语法的详细解释:
1
${parameter+word}
  • 如果 parameter 已设置且不为空,则结果为 word。
  • 如果 parameter 未设置或为空,则结果为空字符串。

标志

$BASH 指向的 shell路径

LFS_CFLAGS 获取与大文件支持相关的编译标志(CFLAGS)

LFS_LDFLAGS 获取与大文件支持相关的链接标志(LDFLAGS)

LFS_LIBS 获取与大文件支持相关的库(LIBS)

$1 $2 $3 … 获取脚本参数

$# 获取脚本参数的个数

-o 逻辑或运算符,表示如果任意一个条件为真,则整个条件为真

-d 选项用于检查目录是否存在

-z 选项用于检查字符串为空

-n 选项用于检查字符串不为空

函数

uname 返回系统信息

-m:返回当前系统的硬件架构

-s 命令用于获取当前主机的操作系统名称

sed 对文本进行基本的文本转换和操作

基本用法

sed 的基本语法如下:

1
sed [选项] '命令' 文件

常见命令

-n 只打印那些被 p 命令显式指定的行

  • -n 选项告诉 sed 只打印那些被 p 命令显式指定的行,而不是默认打印所有处理过的行。

-e 用于指定一个 sed 命令

  • -e 选项-e 选项用于指定一个 sed 命令。可以使用多个 -e 选项来指定多个命令,这些命令将按顺序执行。

s/ 替换命令

  • 格式为 s/模式/替换/。它的作用是将匹配的模式替换为指定的字符串。
  • 可以有多个模式替换命令,每个命令之间用()分隔,最后的替换用/进行区分。
  • ( 和 ):圆括号用于定义一个捕获组。捕获组会保存匹配的子字符串,以便在替换或后续操作中引用
  • \1:反向引用第一个捕获组。在替换中,\1 会被匹配的第一个捕获组替换。
  • \2:反向引用第二个捕获组。在替换中,\2 会被匹配的第二个捕获组替换。

p 打印替换后的行

-E 启用扩展正则表达式

  • ^:匹配行的开头。

  • $:匹配行的结尾。

  • .:匹配任意字符。

  • *:匹配前面一个字符零次或多次。

  • +:匹配前面一个或多个字符。

    • 例如:[0-9]+ 匹配一个或多个数字。
  • \.:匹配点号。

  • (.*):匹配任意字符零次或多次。

tr 将输入中的字符进行替换、删除或压缩

基本用法

tr 命令的基本语法如下:

1
tr [选项] SET1 [SET2]
  • SET1:要转换的字符集。
  • SET2:转换后的字符集。

常见选项

-d:删除 SET1 中的所有字符。

-s:压缩 SET1 中的重复字符。

-c:补集,表示 SET1 中未包含的所有字符。

[:upper:] 用于匹配所有的大写字母(A-Z)

[:lower:] 用于匹配所有的小写字母(a-z)。

1
2
tr '[:upper:]' '[:lower:]' 
# 将大写转换成小写

getconf 查询系统配置变量的值

ln 创建符号链接

  • -f 选项表示强制创建符号链接,即使目标文件已经存在。
  • -s 选项表示创建符号链接而不是硬链接。
  • -n 选项表示如果目标是一个目录,则在目标目录中创建符号链接。

find 查找文件

-path 选项用于匹配文件路径

-newer 选项用于查找比指定文件新的文件

test 用于检查文件类型和比较值的命令。

  • 它可以用于各种条件判断,包括文件属性检查、字符串比较和数值比较。

-gt 用于检查一个数值是否大于另一个数值

  • -gt 是 test 命令的一个比较操作符,表示“大于”(greater than)。它用于比较两个整数值。

-e 用于检查指定的文件或目录是否存在

  • 如果指定的文件或目录存在,test -e 返回真(状态码 0);否则,返回假(非零状态码)

-f 用于检查指定的路径是否为一个文件

-ef 比较两个文件或目录是否指向相同的文件系统对象

-n 用于检查字符串是否为空

grep 用于在文件中搜索指定的字符串

基本用法

1
grep [选项] 搜索模式 [文件]
  • 搜索模式:要搜索的字符串或正则表达式。
  • 文件:要搜索的文件。如果省略文件名,则 grep 会从标准输入读取数据。

常见选项

-i:忽略大小写

  • -i 选项告诉 grep 忽略大小写,即不区分大小写地搜索指定的字符串。

-v:反向匹配

  • -v 选项告诉 grep 反向匹配,即只显示不匹配的行。

-c:统计匹配行的数量

  • -c 选项告诉 grep 统计匹配行的数量,而不是显示匹配的行。

-n:显示匹配行的行号

  • -n 选项告诉 grep 显示匹配行的行号。

-r:递归搜索

  • -r 选项告诉 grep 递归搜索指定目录下的所有文件。

-w:匹配整个单词

  • -w 选项告诉 grep 只匹配整个单词,而不是匹配包含指定字符串的任意行。

-l:只显示包含匹配字符串的文件名

  • -l 选项告诉 grep 只显示包含匹配字符串的文件名,而不显示匹配的行。

-L:只显示不包含匹配字符串的文件名

  • -L 选项告诉 grep 只显示不包含匹配字符串的文件名,而不显示匹配的行。

-o:只显示匹配的字符串

  • -o 选项告诉 grep 只显示匹配的字符串,而不显示整行。

-q:静默模式

  • -q 选项告诉 grep 静默模式,即不显示任何输出。这在脚本中非常有用,因为你可以根据 grep 的退出状态码来判断是否匹配成功。

-A:显示匹配行及后面的行

  • -A 选项告诉 grep 显示匹配行及后面的行。

-B:显示匹配行及前面的行

  • -B 选项告诉 grep 显示匹配行及前面的行。

-C:显示匹配行及前后的行

  • -C 选项告诉 grep 显示匹配行及前后的行。

-E:启用扩展正则表达式

  • -E 选项告诉 grep 启用扩展正则表达式,这样你就可以使用更多的元字符和操作符。

-F:禁用正则表达式

  • -F 选项告诉 grep 禁用正则表达式,即将搜索模式视为普通字符串。

-P:启用 Perl 兼容正则表达式

  • -P 选项告诉 grep 启用 Perl 兼容正则表达式,这样你就可以使用 Perl 正则表达式的语法。

-m:限制匹配行的数量

  • -m 选项告诉 grep 限制匹配行的数量,即只显示指定数量的匹配行。

-s:静默模式

  • -s 选项告诉 grep 静默模式,即不显示任何错误消息。这在脚本中非常有用,因为你可以根据 grep 的退出状态码来判断是否匹配成功。

-x:匹配整行

  • -x 选项告诉 grep 只匹配整行,而不是匹配包含指定字符串的任意行。

awk 用于处理文本文件

基本用法

1
awk [选项] '程序' 文件
  • 程序:要执行的 awk 程序。
  • 文件:要处理的文件。如果省略文件名,则 awk 会从标准输入读取数据。

常见选项

-F:指定字段分隔符

  • -F 选项用于指定字段分隔符。默认情况下,awk 使用空格作为字段分隔符。

NF:字段数量

  • NF 是一个内置变量,表示当前行的字段数量。
    NF1:第一个字段
    NF-1:倒数第二个字段

用法

重定向操作

  • 2>/dev/null 是一个重定向操作,用于将标准错误输出(stderr)重定向到null。这意味着任何错误消息都会被丢弃,而不会显示在终端或日志中。

具体来说,2>/dev/null 的作用如下:

  • 2>:表示重定向标准错误输出(文件描述符 2)。
  • null:是一个特殊的文件,所有写入它的数据都会被丢弃。通过将标准错误输出重定向到null,可以避免在执行命令时显示错误消息。这在某些情况下非常有用,例如,当你希望静默地执行某些命令,而不希望用户看到任何错误消息时。

“$file” in ~ 忽略临时文件

git 命令

rev-parse 用于解析 Git 引用

  • rev-parse 命令用于解析 Git 引用,例如分支、标签、提交 ID 等。它可以将引用解析为完整的 SHA-1 值,或者将 SHA-1 值解析为引用。

–show-cdup 选项用于显示当前目录与顶层目录之间的相对路径

–head 选项用于显示 HEAD 引用的 SHA-1 值

describe 用于显示最接近的标签

–match 选项用于指定要匹配的标签模式

  • 如果 $tag 的值是 v1.0.*,那么 git describe –match=$tag 将只考虑名称以 v1.0. 开头的标签,并生成相应的描述字符串。
1
2
$ git describe --match=v2025.04-rc1
v2025.04-rc1-7-ga2b489b170f

–no-optional-locks 选项用于禁用可选的锁定

  • --no-optional-locks 选项用于禁用可选的锁定。这意味着 Git 不会尝试获取可选的锁定,而是直接执行操作。这在某些情况下非常有用,例如,当你希望忽略锁定问题并继续执行操作时。

status 用于显示工作树的状态

-u 指定如何显示未跟踪的文件

  • normal:显示未跟踪的文件(这是默认行为)。
  • no:不显示未跟踪的文件。
  • all:示所有未跟踪的文件,包括未跟踪的目录中的文件。

–porcelai 选项用于以机器可读的格式显示状态

  • --porcelain 选项用于以机器可读的格式显示状态。这意味着 Git 会以一种易于解析的格式显示状态,而不是以人类可读的格式显示状态。这在脚本中非常有用,因为你可以根据输出来执行其他操作。

diff-index 用于比较工作树和索引

–name-only 选项用于只显示文件名