跳到主要内容

Bash 命令与脚本速查

整理 Bash 的交互快捷键、变量、条件、循环、重定向和脚本排查。数组、[[ ]]、进程替换属于 Bash 功能,不要直接当作通用 /bin/sh 语法。

交互与历史​

按键或命令作用
Ctrl+A / Ctrl+E移到行首 / 行尾
Ctrl+U / Ctrl+K删除光标前 / 后的当前行内容
Ctrl+W删除前一个单词
Ctrl+R反向查找历史
Ctrl+C向前台任务发送中断信号
Ctrl+Z暂停前台任务,再用 fg 恢复
history列出历史命令
jobs -l查看当前 shell 管理的任务

变量与引用​

name='wiki' # 等号两侧不能有空格
printf '%s\n' "$name" # 展开变量时保留双引号
export APP_ENV=production # 传给之后启动的子进程
APP_ENV=test ./run.sh # 只对这一条命令生效
today=$(date +%F)
count=$((2 + 3))
printf '%s\n' "${missing:-默认值}"
printf '%s\n' "${name^^}" # Bash 4+:大写转换

单引号保留字面值;双引号允许变量和命令替换,但阻止展开结果再次分词和通配。更多细节见 Linux 变量速查。

数组、条件和循环​

files=("a file.txt" "b.txt")
for file in "${files[@]}"; do
if [[ -f "$file" && -r "$file" ]]; then
printf '%s\n' "$file"
fi
done

while IFS= read -r line || [[ -n "$line" ]]; do
printf '%s\n' "$line"
done < input.txt

case "${1:-}" in
start) printf '启动\n' ;;
stop) printf '停止\n' ;;
*) printf '用法:start 或 stop\n' >&2; exit 2 ;;
esac
判断含义
[[ -e "$p" ]]路径存在
[[ -f "$p" ]] / [[ -d "$p" ]]普通文件 / 目录
[[ -z "$s" ]] / [[ -n "$s" ]]空 / 非空字符串
[[ "$a" == "$b" ]]字符串相等
(( count > 0 ))整数比较

输入输出与管道​

command >out.log 2>err.log # 分别保存标准输出、错误输出
command >all.log 2>&1 # 合并输出;重定向顺序有意义
command >>out.log # 追加
command | tee out.log # 屏幕显示并写入文件
diff <(sort a.txt) <(sort b.txt) # Bash 进程替换

cat <<'EOF'
$name 在这里不会展开
EOF

2>&1 >out.log 与 >out.log 2>&1 不等价:前者先让错误输出指向当时的标准输出。

文件与文本查询​

find . -type f -name '*.log'
grep -Rni -- 'error' ./logs
tail -n 100 app.log
tail -f app.log
sort access.log | uniq -c | sort -nr | head
du -sh ./data
df -h

处理包含空格、换行的文件名时用 find … -exec … {} + 或 NUL 分隔的 -print0、xargs -0,不要把 ls 输出当可靠的文件清单。

函数与排错​

log() {
printf '[%s] %s\n' "$(date +%T)" "$*" >&2
}

bash -n script.sh # 只检查语法
bash -x script.sh # 执行并打印跟踪信息
shellcheck script.sh # 安装 ShellCheck 后做静态检查

脚本可按需要启用 set -euo pipefail,但 -e 在条件判断、部分列表等语境有例外;预期可能失败的命令应显式处理。-x 会打印展开后的参数,处理密钥的脚本不要留下调试日志。

来源与许可​

本页由 Jacob’s Wiki 于 2026-11-05 对 IT-Tools 原文作中文摘译、重组和补充,保留常用操作,并非逐行全译。原文归 IT-Tools 项目贡献者所有。

本页译文与改编内容按 GNU GPL 3.0 提供,不附带担保;本站 Markdown 源码可用于修改和再分发。

返回开发运维速查目录