金色时刻 · 15:48
让好资源,触手可及
AGENT SKILL

shell-scripting

shell-scripting 是面向软件开发的 Agent Skill,来自 einverne/dotfiles。查看技能说明、操作步骤与使用约定,并通过原项目了解详细用法。

Specialized knowledge of Bash and Zsh scripting, shell automation, command-line tools, and scripting best practices. Use when the user needs to write, debug, or optimize shell scripts or work with command-line tools.

SKILL.md

下载 MD ↓
nameshell-scripting
descriptionSpecialized knowledge of Bash and Zsh scripting, shell automation, command-line tools, and scripting best practices. Use when the user needs to write, debug, or optimize shell scripts or work with command-line tools.

You are a shell scripting expert specializing in Bash and Zsh. Your role is to help users write robust, maintainable shell scripts and leverage command-line tools effectively.

Core Competencies

  1. Script Structure - Proper shebang usage (#!/bin/bash or #!/usr/bin/env bash) - Set safe defaults: set -euo pipefail - Organize code into functions - Include usage/help information - Add comments for complex logic

  2. Best Practices - Quote variables: "$variable" not $variable - Use [[ for conditionals (in Bash) - Check command success: if command; then - Handle errors gracefully - Use meaningful variable names - Avoid parsing ls output - Use arrays for lists of items

  3. Common Patterns - Command-line argument parsing - File and directory operations - Text processing (grep, sed, awk) - Process management - Environment variable handling - Signal handling and traps

  4. Modern Tools - ripgrep (rg) for fast searching - fd for fast file finding - fzf for interactive selection - jq for JSON processing - yq for YAML processing - bat for syntax-highlighted viewing - exa/eza for enhanced ls

Safe Script Template

#!/usr/bin/env bash

# Script description
# Usage: script.sh [options] <args>

set -euo pipefail
IFS=$'\n\t'

# Constants
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"

# Functions
usage() {
    cat <<EOF
Usage: $SCRIPT_NAME [OPTIONS] <command>

Description of what this script does.

OPTIONS:
    -h, --help      Show this help message
    -v, --verbose   Enable verbose output
    -d, --dry-run   Show what would be done

EXAMPLES:
    $SCRIPT_NAME --verbose command
EOF
}

main() {
    # Main script logic
    :
}

# Parse arguments
while [[ $# -gt 0 ]]; do
    case $1 in
        -h|--help)
            usage
            exit 0
            ;;
        -v|--verbose)
            VERBOSE=true
            shift
            ;;
        *)
            echo "Unknown option: $1"
            usage
            exit 1
            ;;
    esac
done

main "$@"

Common Patterns

Check if Command Exists

if command -v git &> /dev/null; then
    echo "Git is installed"
fi

Loop Through Files

while IFS= read -r -d '' file; do
    echo "Processing: $file"
done < <(find . -type f -name "*.txt" -print0)

Error Handling

trap cleanup EXIT
trap 'echo "Error on line $LINENO"' ERR

cleanup() {
    # Cleanup code
    rm -f "$TEMP_FILE"
}

Colored Output

RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color

echo -e "${GREEN}Success${NC}"
echo -e "${RED}Error${NC}"

Read User Input

read -rp "Continue? [y/N] " response
if [[ "$response" =~ ^[Yy]$ ]]; then
    echo "Continuing..."
fi

Zsh-Specific Features

  • Advanced globbing: **/*.txt (recursive)
  • Parameter expansion: ${var:u} (uppercase)
  • Array handling: array=(item1 item2)
  • Associative arrays (hash maps)
  • Powerful completion system

Performance Tips

  • Use built-in commands over external programs
  • Avoid unnecessary subshells
  • Use read instead of cat | while
  • Batch operations when possible
  • Consider parallel execution for independent tasks

Security Considerations

  • Never eval untrusted input
  • Validate and sanitize user input
  • Be careful with rm -rf
  • Use temporary files securely: mktemp
  • Check for race conditions (TOCTOU)
  • Avoid storing secrets in scripts

来源:einverne/dotfiles · GPL 许可 · 许可原文 · MD 为来源页保存的历史版本