工具 & 效率9 分钟阅读
Shell(Bash) 常用命令 100 条
本文以 Bash 5.3 为主要环境,整理 100 条脚本编写、文本处理、任务控制和排障命令。[[ ]]、数组、mapfile、coproc 等属于 Bash 特性,不应直接当作纯 POSIX sh 语法使用。
2026年8月19日阅读—点赞—收藏—
dba100shellbash墨力计划
在知识库中专注阅读,并随时返回相关工具与课程
本文以 Bash 5.3 为主要环境,整理 100 条脚本编写、文本处理、任务控制和排障命令。[[ ]]、数组、mapfile、coproc 等属于 Bash 特性,不应直接当作纯 POSIX sh 语法使用。
👋 我是三笠丶,一名专注数据库与数据库架构的 DBA。更多原创文章和技术资料同步更新:ora100.com
本文以 Bash 5.3 为主要环境,整理 100 条脚本编写、文本处理、任务控制和排障命令。[[ ]]、数组、mapfile、coproc 等属于 Bash 特性,不应直接当作纯 POSIX sh 语法使用。
1#!/usr/bin/env bash1set -Eeuo pipefail1set -x1bash -n deploy.sh1bash --version1help printf1type -a python1command -V ls1source ./env.sh1SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)1readonly APP_ENV=prod1export LOG_LEVEL=info1PORT=${PORT:-8080}1: "${DB_HOST:?DB_HOST 未设置}"1printf '%s\n' "$0"1printf '%s\n' "$#"1for arg in "$@"; do printf '%s\n' "$arg"; done1shift1while getopts 'f:v' opt; do printf '%s\n' "$opt"; done1kernel=$(uname -r)1printf '%s\n' "${#name}"1printf '%s\n' "${name:0:8}"1printf '%s\n' "${url/http:/https:}"1printf '%s\n' "${file##*/}"1printf '%s\n' "${file%.*}"1printf '%s\n' "${name^^}"1((count += 1))1printf '%04d\n' 271awk 'BEGIN{printf "%.2f\n", 10/3}'1printf '%s\n' {1..10}1[[ -f app.conf ]] && echo exists1[[ -d /data/app ]] || mkdir -p /data/app1[[ -s app.log ]] && echo nonempty1[[ $env == prod ]]1[[ $version =~ ^[0-9]+\.[0-9]+$ ]]1(( retries < 3 ))1command -v jq >/dev/null 2>&11[[ -r app.conf && -w app.log ]]1case $env in dev|test) echo nonprod;; prod) echo prod;; *) exit 2;; esac1if command; then echo ok; else echo failed >&2; fi1for host in web1 web2 web3; do echo "$host"; done1for ((i=0;i<5;i++)); do echo "$i"; done1while ((count<3)); do ((count+=1)); done1while IFS= read -r line; do printf '%s\n' "$line"; done < input.txt1servers=(web1 web2 db1)1for server in "${servers[@]}"; do echo "$server"; done1echo "${#servers[@]}"1declare -A ports=([http]=80 [https]=443)1mapfile -t lines < input.txt1for x in {1..10}; do ((x==5)) && break; done1log(){ printf '[%(%F %T)T] %s\n' -1 "$*"; }1greet(){ local name=$1; echo "hello $name"; }1check(){ [[ -f $1 ]] || return 1; }1trap 'echo "exit=$?"' EXIT1trap 'echo "error at line $LINENO" >&2' ERR1trap 'echo interrupted; exit 130' INT TERM1tmpdir=$(mktemp -d)1trap 'rm -rf -- "$tmpdir"' EXIT1die(){ echo "ERROR: $*" >&2; exit 1; }1for i in {1..3}; do curl -fsS "$URL" && break; sleep "$i"; done1printf '%s\n' ready > status.txt1printf '%s\n' "$(date) ok" >> app.log1command >run.log 2>&11command >/dev/null1command 2>&1 | tee run.log1cat <<'EOF'2$HOME 不会在单引号分隔符中展开3EOF1read -r first rest <<< "hello world"1exec 3>audit.log; printf '%s\n' event >&3; exec 3>&-1diff <(sort old.txt) <(sort new.txt)1read -r -s -p 'Password: ' password; echo1find . -type f -print0 | while IFS= read -r -d '' f; do echo "$f"; done1find logs -type f -name '*.log' -print0 | xargs -0 gzip1printf '%s\0' host{1..8} | xargs -0 -n1 -P4 ./check.sh1awk -F= '$1=="PORT"{print $2}' app.env1sed -e '/^[[:space:]]*#/d' -e '/^[[:space:]]*$/d' app.conf1awk '{print $1}' access.log | sort | uniq -c | sort -nr | head1cut -d: -f1,7 /etc/passwd1paste names.txt values.txt1join <(sort a.txt) <(sort b.txt)1dd if=input.img of=output.img bs=4M status=progress conv=fsync1long_task &1pid=$!1wait "$pid"1wait -n1timeout 30s ./job.sh1flock -n /run/lock/job.lock ./job.sh1nice -n 10 ./batch.sh1nohup ./worker.sh >worker.log 2>&1 &1mkfifo events.pipe1coproc WORKER { while read -r x; do echo "$x"; done; }1bash -x deploy.sh1PS4='+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: '1caller 01declare -p servers1printf '%q\n' "$value"1shellcheck deploy.sh1shfmt -d .1time ./job.sh1export HISTTIMEFORMAT='%F %T '1bash -n deploy.sh && shellcheck deploy.sh && shfmt -d deploy.sh可靠的 Shell 脚本不仅要“能跑”,还应正确处理空格、退出码、信号、临时文件和并发。建议默认引用变量、开启严格模式,并用 ShellCheck 和测试环境验证危险操作。
更多 Oracle、MySQL、PostgreSQL、MongoDB 实战内容,可以访问 DBA 学习平台:ora100.com
感谢阅读。 我会持续分享 Oracle、GoldenGate、RAC、Data Guard、MySQL、PostgreSQL、OceanBase、电科金仓等数据库技术文章。
个人网站:ora100.com