实用Bash技巧:工作控制、历史命令、数组与高级变量用法

文章目录

在使用 Bash 时,掌握工作控制和历史指令的用法将大大提高效率。此外,了解 Bash 数组和变量的高级用法也能帮助你更灵活地处理数据。本文将详细介绍这些内容,帮助你提升 Bash 的使用技巧。

Bash 工作控制

Bash 提供了一些非常有用的命令用于管理进程。以下是一些常用的工作控制命令:

  • %%%+:调用当前正在运行的工作。
  • %-:调用上一个工作。
  • %n:将工作编号为 n 的进程放到前台执行,等同于 fg %n
  • %?s1:查找程序名称中含有 s1 的工作,? 表示搜索。
  • %./s1:查找以 ./s1 开头的进程。
  • C-z:暂停当前进程并使用 bg 将其移至后台,相当于在命令后加上 &
  • disown %n:移除工作,不再受到 shell 的管理。

Bash 历史指令

历史指令让你能够快速重复之前执行的命令:

  • !-n:执行倒数第 n 个命令。
  • !!:执行上一个命令。
  • !字符串:执行最近一个包含该字符串的历史命令。
  • !?字符串?:执行最近一个包含字符串的历史命令。
  • !#:获取当前输入的命令字符串。
  • !!:$:获取上一个命令的最后一个参数。
  • !ls:1:获取最近一个以 ls 开头的命令的第一个参数。
  • !!:3-5:获取上一个命令中,介于第 3 到 5 的参数。
  • !!:s/字符串1/字符串2/:将上一个命令中的字符串 1 替换为字符串 2
  • !!:h:获取前一个命令的目录部分。
  • !!:t:获取前一个命令的文件名部分。
  • !!:p:显示上一个命令,但不执行。

Bash 数组用法

在 Bash 中,数组的使用使得处理多个数据变得简单:

  • 定义数组a=(1 2 3 4 5)a=(1 [4]=4 5)(可以不连续)。
  • 获取值${a[index]}
  • 获取所有元素${a[@]}${a[*]}
  • 获取元素个数${#a[@]}${#a[*]}

调整 Bash 变量属性为只读

要将变量设置为只读,可以使用以下命令:

  • readonly 变量名:设置变量为只读。
  • readonly -p:显示所有只读变量。
  • readonly -f 函数名:设置函数为只读。
  • readonly -a 数组名:将数组设置为只读。
  • declare -r 变量名:使用 declare 设置只读属性。

Bash 高级变量用法

变量使用

  • ${变量名}:获取变量值。
  • $(命令):获取命令的输出。
  • ${待测变量:-替换值}:如果变量不存在或为空,返回替换值。
  • ${待测变量:=替换值}:如果变量不存在或为空,赋值为替换值。
  • ${待测变量:?错误信息}:如果变量不存在或为空,返回错误信息。
  • ${待测变量:+替换值}:如果变量存在且非空,返回替换值。

字符串操作

  • 切片${变量:位置起始点}${变量:位置起始点:长度}

  • 计算字符串长度${#str}expr length "字符串"

  • 对比与删除

    • ${变量#样式}:从前面开始,最短删除。
    • ${变量##样式}:从前面开始,最长删除。
    • ${变量%样式}:从后面开始,最短删除。
    • ${变量%%样式}:从后面开始,最长删除。
  • 取代或删除部分字符串

    • 替换第一个匹配:${变量/样式/替换字符串}
    • 替换所有匹配:${变量//样式/替换字符串}
    • 只匹配行首:${变量/#样式/替换字符串}
    • 只匹配行末:${变量/%样式/替换字符串}
    • 删除:不加替换字符串表示删除。

变量名列表

  • 列出指定字符串开头的变量名列表:${!开头字符串@}${!开头字符串*}
  • 获取数组索引列表:${!数组变量[@]}${!数组变量[*]}

算术扩展

  • $((算术式))expr 算术式let 算术式
  • 支持不同进制数字表示:基底#数字

常用 Shell 命令

  • 杀死僵尸进程
kill -HUP $(ps -A -ostat,ppid | awk '/[zZ]/{print $2}')

FAQ 常见问题

1. 如何将一个后台进程移回前台? 使用命令fg %n,其中%n是进程编号。

2. 如何查找历史命令中的特定命令? 使用!?字符串?查找最近包含该字符串的历史命令。

3. 如何定义一个不连续的数组? 你可以通过a=(1 [4]=4 5)方式定义不连续数组,索引间的空隙会自动填充为空。

总结

通过了解 Bash 的工作控制、历史指令、数组和变量的高级用法,你可以更加高效地使用 Bash,提升工作效率。熟练运用这些命令和技巧,将使你在处理日常任务时更加得心应手。


也可以看看