Bash Shell 技巧 快速命令编辑 文件名生成 完成 套接字通信 算术评估

2025-06-04

Bash Shell 技巧

快速命令编辑

文件名生成

完成

套接字通信

算术评估

这篇文章最初发表于我的博客,发表于2007年,我很高兴看到它经久不衰。即使到了今天,我仍然在使用这里提到的许多技巧。

快速命令编辑

  • ^orig^repl^将上一个命令中的“orig”替换为“repl”,然后执行新命令。

文件名生成

  • cp filename{,.bak}将“filename”复制为“filename.bak”。
  • mkdir -p dir{1,2,3}/subdir{1,2}创建dir1/subdir1dir1/subdir2dir2/subdir1dir2/subdir2dir3/subdir1dir3/subdir2目录

完成

不,我说的不是命令/文件名的补全。我说的是各种命令的参数补全,以及根据应用程序补全文件名。这是
zsh 备受推崇的功能之一,但很多人不知道的是,它也可以在 bash 中使用。
你只需要安装bash-completion即可。

安装 bash 补全后,您可以使用TAB键来补全常用命令(例如 etc)的参数。 此外rpm, apt, find, grep,bash-completion 还会通过查找文件中的主机名来补全主机名。对于基于 Linux 的发行版,bash-completion 甚至会查找已安装的软件包名称。
ssh, scp$HOME/.ssh/authorized_keysrpm

我发现最方便的功能是基于命令上下文的文件名完成。例如,如果您键入tar -zxvf然后按两次 TAB 键,您将获得以结尾的文件列表,.tar.gz or .tgz而不是目录中所有文件的列表。

套接字通信

我敢打赌很多人没听说过,但 bash 确实可以通过 进行基本的套接字通信/dev/tcp, /dev/udp。这些是 bash 用于与网络套接字通信的伪设备。事实上,如果你听说过,ls -l /dev/tcp /dev/udp你会收到“没有此文件或目录”的错误消息。

那么如何使用它们呢,下面我给出 2 个示例。

一个用于快速检查 HTTP 服务器标头的函数。这里有一个简单的函数,你可以把它添加到你的$HOME/.bashrc代码中,用来检查 HTTP 服务器的标头。

headers() {
  server=$1; port=${2:-80}
  exec 5<> /dev/tcp/$server/$port
  echo -e "HEAD / HTTP/1.0\nHost: ${server}\n\n" >&5;
  cat 0<&5;
  exec 5>&-
}
Enter fullscreen mode Exit fullscreen mode

只需通过以下方式调用它

headers <servername or ip> <port>

如果未提供,端口号默认为 80。

第二个示例是检查端口是否打开的快速方法。当然,你也可以使用 netcat 或 telnet,但我觉得这个更方便。

testPort() {
  server=$1; port=$2; proto=${3:-tcp}
  exec 5<>/dev/$proto/$server/$port
  (( $? == 0 )) && exec 5<&-
}
Enter fullscreen mode Exit fullscreen mode

再次调用它

testPort <servername or ip> <port> <protocol>

协议可以是tcp或udp,默认为tcp。

算术评估

Bash 可以执行算术运算。它们使用起来非常方便expr。以下是一些示例。请注意,变量名没有 $ 前缀。

((count++)) #increment value of variable 'count' by one.
((total+=current)) # set total = total+current.
((current>max?max=current:max=max)) # ternary expression.
Enter fullscreen mode Exit fullscreen mode
文章来源:https://dev.to/bhaskar_vk/bash-shell-tricks
PREV
如何使用 React 设置 Redux(2020)当前数量:{count}
NEXT
什么是 Javascript?