用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/pluginagentmarketplace/custom-plugin-bash-shell --skill shell-automation命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Production-grade Bash fundamentals - syntax, variables, control flow, functions
基于 SOC 职业分类
正在显示 SKILL.md
| name | shell-automation |
| description | Production-grade shell automation - scripts, CI/CD, makefiles |
| sasmp_version | 1.3.0 |
| bonded_agent | 06-automation |
| bond_type | PRIMARY_BOND |
| version | 2.0.0 |
| difficulty | advanced |
| estimated_time | 8-10 hours |
Master shell automation, CI/CD, and deployment scripting
After completing this skill, you will be able to:
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"
log_info() { printf '[INFO] %s\n' "$*" >&2; }
log_error() { printf '[ERROR] %s\n' "$*" >&2; }
die() { log_error "$1"; exit "${2:-1}"; }
usage() {
cat <<EOF
Usage: $SCRIPT_NAME [options] <argument>
Options:
-h, --help Show this help
-v, --verbose Enable verbose
EOF
}
main() {
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help) usage; exit 0 ;;
*) break ;;
esac
done
log_info "Starting..."
}
main "$@"
.PHONY: all build test lint clean help
SHELL := /bin/bash
.DEFAULT_GOAL := help
help: ## Show help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf "%-15s %s\n", $$1, $$2}'
build: ## Build project
./scripts/build.sh
test: ## Run tests
bats tests/
lint: ## Run linter
shellcheck scripts/*.sh
clean: ## Clean artifacts
rm -rf dist/ build/
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Lint
run: shellcheck **/*.sh
- name: Test
run: bats tests/
#!/usr/bin/env bats
setup() {
source "./functions.sh"
TEST_DIR="$(mktemp -d)"
}
teardown() {
rm -rf "$TEST_DIR"
}
@test "function returns success" {
run my_function "arg"
[ "$status" -eq 0 ]
}
@test "output contains expected" {
run my_function "arg"
[[ "$output" == *"expected"* ]]
}
#!/usr/bin/env bash
set -euo pipefail
deploy() {
local version="${1:-$(git describe --tags)}"
log_info "Deploying $version"
# Pre-flight checks
preflight_check
# Create backup
create_backup
# Deploy
rsync -avz --delete dist/ /opt/app/
# Restart service
systemctl restart app
log_info "Deployed $version"
}
rollback() {
local previous
previous=$(ls -t /opt/backups | head -1)
log_info "Rolling back to $previous"
rsync -avz "/opt/backups/$previous/" /opt/app/
systemctl restart app
}
retry() {
local max="${1:-3}"
local delay="${2:-1}"
shift 2
for ((i=1; i<=max; i++)); do
if "$@"; then
return 0
fi
log_info "Retry $i/$max in ${delay}s..."
sleep "$delay"
delay=$((delay * 2))
done
return 1
}
# Usage
retry 5 2 curl -sf https://api.example.com
| Don't | Do | Why |
|---|---|---|
| Skip ShellCheck | Always lint | Catch bugs |
| No error handling | Use set -e | Fail early |
| Hardcode paths | Use variables | Flexibility |
| Skip tests | Write bats tests | Reliability |
| Error | Cause | Fix |
|---|---|---|
| Script not running | Not executable | chmod +x |
| Command not found | PATH issue | Use full path |
| Syntax error | Missing quotes | ShellCheck |
# Enable trace
set -x
# Run with debug
bash -x script.sh
# ShellCheck
shellcheck script.sh