From d4d75af4289589a962ee9dd65e2960d7ff68a5e2 Mon Sep 17 00:00:00 2001 From: Branko May Trinkwald Date: Wed, 24 Dec 2025 00:29:30 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=BC=20feat(dojo):=20BashPanda=20G?= =?UTF-8?q?=C3=BCrtel-System=20-=20Von=20Schwarz=20auf=20Weiss=20?= =?UTF-8?q?=F0=9F=A5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der 18. WaldwΓ€chter betritt den Wald: BashPanda lehrt Bash als Kampfkunst! ✨ Neue Features: 🐼 BashPanda WaldwΓ€chter: - Kung Fu Meister PersΓΆnlichkeit - Lehrt Bash durch Kampfkunst-Metaphern - Integriert in waldwaechter.sh Library - Crew Memory: Kennt alle anderen WaldwΓ€chter πŸ₯‹ 6 GΓΌrtel-Missionen (Progressive Bash-Meisterschaft): - πŸ–€ Schwarzer GΓΌrtel: echo, Variablen, read, ANSI codes - πŸ’– Pinker GΓΌrtel: if/then, while/for, Arrays, Arithmetik - πŸ’™ Blauer GΓΌrtel: sed, case, bc, Textverarbeitung - πŸ’š GrΓΌner GΓΌrtel: grep, regex, Pattern Matching - πŸ’› Gelber GΓΌrtel: Funktionen, source, Parameter - 🀍 Weisser GΓΌrtel: Background jobs, Prozesse, ParallelitΓ€t πŸ“ Interaktives Quiz-System: - Browser-based GΓΌrtelprΓΌfung (crumbblocks) - 30 Fragen (5 pro GΓΌrtel) - Farbcodiert nach GΓΌrtel - Auto-Export via Clipboard - Terminal-Auswertung mit Zertifikaten πŸŽ“ Zertifikate-System: - Automatische Generierung bei 80%+ - Gespeichert in logs/zertifikate/ - BashPanda's Segen & Weisheiten πŸ“š Dokumentation: - CLAUDE.md komplett aktualisiert - BashPanda als 18. WaldwΓ€chter dokumentiert - VollstΓ€ndige Dojo-Architektur beschrieben "Der Weg des Codes ist wie der Weg der Kampfkunst: Geduld, PrΓ€zision, Wiederholung." - BashPanda πŸΌπŸŽ‹ Crumbforest wΓ€chst! 🌲 Der Wurzelbau geht weiter! 🌳 πŸ€– Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- CLAUDE.md | 1133 ++++++++++++++++---- crumbblocks/bashpanda_guertelpruefung.html | 631 +++++++++++ crumbforest_roles/bashpanda_zero.sh | 214 ++++ lib/waldwaechter.sh | 6 + missions/dojo/blauer_guertel.meta.json | 7 + missions/dojo/blauer_guertel.sh | 208 ++++ missions/dojo/evaluate_guertelpruefung.sh | 190 ++++ missions/dojo/gelber_guertel.meta.json | 7 + missions/dojo/gelber_guertel.sh | 274 +++++ missions/dojo/gruener_guertel.meta.json | 7 + missions/dojo/gruener_guertel.sh | 220 ++++ missions/dojo/pinker_guertel.meta.json | 7 + missions/dojo/pinker_guertel.sh | 352 ++++++ missions/dojo/schwarzer_guertel.meta.json | 7 + missions/dojo/schwarzer_guertel.sh | 300 ++++++ missions/dojo/weisser_guertel.meta.json | 7 + missions/dojo/weisser_guertel.sh | 313 ++++++ 17 files changed, 3666 insertions(+), 217 deletions(-) create mode 100644 crumbblocks/bashpanda_guertelpruefung.html create mode 100755 crumbforest_roles/bashpanda_zero.sh create mode 100644 missions/dojo/blauer_guertel.meta.json create mode 100755 missions/dojo/blauer_guertel.sh create mode 100755 missions/dojo/evaluate_guertelpruefung.sh create mode 100644 missions/dojo/gelber_guertel.meta.json create mode 100755 missions/dojo/gelber_guertel.sh create mode 100644 missions/dojo/gruener_guertel.meta.json create mode 100755 missions/dojo/gruener_guertel.sh create mode 100644 missions/dojo/pinker_guertel.meta.json create mode 100755 missions/dojo/pinker_guertel.sh create mode 100644 missions/dojo/schwarzer_guertel.meta.json create mode 100755 missions/dojo/schwarzer_guertel.sh create mode 100644 missions/dojo/weisser_guertel.meta.json create mode 100755 missions/dojo/weisser_guertel.sh diff --git a/CLAUDE.md b/CLAUDE.md index 0a0d6a7..811db53 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,250 +4,647 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## CF_Zero_V1 Project Overview -CF_Zero_V1 is an educational Bash learning platform called "Crumbforest" that uses character-based AI assistants to teach command-line concepts through interactive missions. The project combines shell scripting, Python-based computer vision, and OpenRouter API integration to create an immersive learning experience. +CF_Zero_V1 is an educational Bash learning platform called "Crumbforest" that uses 17 character-based AI assistants ("WaldwΓ€chter" - Forest Guardians) to teach command-line concepts, programming fundamentals, and hardware/robotics projects through interactive missions. The system is designed to run on devices ranging from Raspberry Pi Zero to desktop computers, emphasizing transparency, file-based state, and pedagogical value. ## Key Commands ### Mission System ```bash -# Launch the interactive mission selector +# Launch the interactive mission selector (main entry point) ./crumb-mission-selector.sh +# Option 9 opens CrumbCrew Command Central (interactive shell with all AI characters) + # Run individual missions directly -bash missions/basics/fridolin.sh # Navigation basics -bash missions/basics/balu.sh # File creation -bash missions/basics/noko.sh # File reading -bash missions/advanced/dns_mission.sh # DNS tools -bash missions/advanced/ssh_security.sh # SSH basics +bash missions/basics/fridolin.sh # Navigation basics +bash missions/basics/balu.sh # File creation +bash missions/basics/noko.sh # File reading +bash missions/advanced/dns_mission.sh # DNS tools +bash missions/advanced/ssh_security.sh # SSH basics +bash missions/robots/lipo_power_academy.sh # LiPo battery education +bash missions/robots/regenbogen_zaehlmaschine.sh # Rainbow counter project +bash missions/robots/mond_maschine.sh # Moon machine ML project +bash missions/robots/solar_kettle.sh # Solar water heater physics ``` -### AI Character Assistants (Crumbforest Roles) -All roles require `OPENROUTER_API_KEY` environment variable set in `.env` file: +### AI Character Assistants - The 17 WaldwΓ€chter + +All characters require `OPENROUTER_API_KEY` environment variable set in `.env` file: + ```bash -# Configure environment +# Configure environment (required first step) cp .env.template .env # Edit .env and add your OPENROUTER_API_KEY -# Character-based CLI assistants -./crumbforest_roles/mayaeule_zero.sh "What is friendship?" -./crumbforest_roles/deepbit_zero.sh "How do I use grep?" -./crumbforest_roles/bugsy_zero.sh "Explain loops in bash" -./crumbforest_roles/schnippsi_zero.sh "What is curl?" -./crumbforest_roles/tobi_zero.sh "How to use jq?" -./crumbforest_roles/templatus_zero.sh "Create HTML structure" +# === DAS DREIECK (The Triangle - Foundation) === +# Philosophical/didactic framework (not a technical module) +./crumbforest_roles/dumbosql_zero.sh "Design a sensor database" # Structure/Lists +./crumbforest_roles/funkfox_zero.sh "Explain pipes in rap form" # Flow/Rhythm +./crumbforest_roles/taichitaube_zero.sh "How to balance chaos?" # Balance/Spiral -# Access CrumbCrew Command Central (all assistants in one shell) -# Run mission selector and choose option 9 -./crumb-mission-selector.sh +# === Hardware Team === +./crumbforest_roles/tobi_zero.sh "Explain capacitors" # CapaciTobi - Electronics +./crumbforest_roles/schnecki_zero.sh "How to wire sensors?" # Wiring specialist +./crumbforest_roles/schraubaer_zero_final.sh "Welding tips?" # Heavy machinery + +# === Code Team === +./crumbforest_roles/snakepy_zero.sh "Python list comprehension" # Python guide +./crumbforest_roles/pepperphp_zero.sh "MVC architecture" # PHP structure +./crumbforest_roles/crabbrust_zero.sh "Memory safety in Rust" # Security guardian +./crumbforest_roles/spider_zero.sh "API REST design" # Network specialist + +# === UI Team === +./crumbforest_roles/schnippsi_zero.sh "CSS grid layout" # Styling +./crumbforest_roles/templatus_zero.sh "HTML structure" # Templates +./crumbforest_roles/asciimonster_zero.sh "Draw ASCII art" # Terminal art + +# === System Team === +./crumbforest_roles/mayaeule_zero.sh "What is wisdom?" # Meta-knowledge owl +./crumbforest_roles/deepbit_zero.sh "How does grep work?" # Bash deep dive +./crumbforest_roles/bugsy_zero.sh "Debug this error" # Debugging +./crumbforest_roles/vektor_zero.sh "Navigate this project" # Point-to-point guide ``` -### Camera Vision System (SnakeCam) -```bash -# Start the Flask-based gesture recognition app -cd snake_camera_vision_v2 -python app.py -# Access at http://localhost:5000 +### Unified Access via WaldwΓ€chter Library -# View gesture detection module -python gestures/gestures_v4.py +**Preferred method for missions and scripts:** +```bash +# Source the library to get all characters as shell functions +source lib/waldwaechter.sh + +# Now all characters are available as commands (no path needed) +dumbosql "Design a users table" +funkfox "Explain while loops as a rap" +schnippsi "Center a div with CSS" +mayaeule "What is the meaning of code?" + +# Utility commands (available after sourcing waldwaechter.sh) +crew_tokens # View token usage across all characters +crew_status # Check which characters are available +crew_memory # View conversation histories (crew context) +crew_doctor # System health check (dependencies, API keys) +crew_syntax # Validate bash syntax for all scripts +crew_help # Show available commands +crew_memo # Track creative outputs (Mixcloud, Git, etc.) +``` + +### CrumbCrew Command Central (Position 9 in Mission Selector) + +Interactive shell with all WaldwΓ€chter pre-loaded: +- Custom prompt: `(🌲 CrumbCrew) user@host:path$` +- All 17 characters available as direct commands +- Utilities: `crew_status`, `crew_tokens`, `crew_memory`, `crew_doctor` +- Exit with `exit` or Ctrl+D + +### Crumbblocks - Browser-Terminal Bridge + +```bash +# Start local server for interactive HTML simulations +./start_crumbblocks.sh + +# Opens browser to http://localhost:8000 (or similar) +# Available simulations: +# - lipo_6s_charger_sim_safe_v7.html (LiPo battery charger) +# - rainbow_counter.html (Color event counter) +# - solar_kettle_dark.html (Solar water heater physics) +# - bezier_stream.html, painter.html, and more + +# Simulations use Clipboard API to send results back to terminal +# Evaluation scripts in missions/robots/ parse clipboard data ``` ### Token Usage Monitoring + ```bash -# View token usage across all AI assistants -./log_tokens_viewer_v4.sh +# View token usage across all AI assistants (new unified system) +crew_tokens -# Clean up malformed token logs -./fix_token_logs.sh +# View individual character logs (repo-based) +cat logs/mayaeule/token_log.json +cat logs/funkfox/token_log.json +cat logs/dumbosql/token_log.json -# Check individual agent logs -cat ~/.deepbit_logs/token_log.json -cat ~/.bugsy_logs/token_log.json +# View conversation history +cat logs/mayaeule/eule_history.json +cat logs/funkfox/funkfox_history.json + +# Track creative outputs +crew_memo +cat logs/crumb_memo.json +``` + +### Creative Output Tracking (crumb_memo) + +```bash +# Log creative outputs (dual transparency: input + output) +crumb_memo "https://mixcloud.com/your-mix" "My first beat" +crumb_memo "https://github.com/user/repo" "My robot code" +crumb_memo "https://youtube.com/watch?v=..." "Tutorial video" + +# View all logged creative outputs +crew_memo ``` ## Architecture Overview +### Core Design Philosophy + +**WaldwΓ€chter (Forest Guardian) Architecture:** +- **Transparency over magic** - All state is file-based JSON +- **Metadata-driven extensibility** - Add content without code changes +- **Educational first** - Token tracking teaches mindful questioning +- **Raspberry Pi Zero compatible** - Minimal dependencies, lightweight +- **Multilingual** - Characters respond in the language of the question +- **File-based agent memory** - Characters can read each other's logs + ### Mission System Architecture **Metadata-Driven Design:** - Each mission consists of two files: `mission_name.sh` (executable) and `mission_name.meta.json` (metadata) - The mission selector (`crumb-mission-selector.sh`) dynamically loads missions by scanning directories -- Metadata structure: - ```json - { - "icon": "🦊", - "title": "Mission Title", - "description": "What this teaches", - "category": "basics|advanced|challenges", - "enabled": true - } - ``` +- **No code changes required** to add new content - just drop in files + +**Metadata structure:** +```json +{ + "icon": "🦊", + "title": "Mission Title", + "description": "What this teaches", + "category": "basics|advanced|challenges|robots", + "enabled": true +} +``` **Mission Categories:** -- `missions/basics/` - Beginner missions (navigation, file operations) -- `missions/advanced/` - Advanced topics (DNS, SSH, networking) -- `missions/challenges/` - Interactive challenges (future) +- `missions/basics/` - Beginner missions (navigation, file operations) - 3 missions +- `missions/advanced/` - Advanced topics (DNS, SSH, networking) - 2 missions +- `missions/challenges/` - Story-based complex missions - 1 mission +- `missions/robots/` - Hardware projects (LiPo, rainbow counter, moon machine, solar kettle) - 5 missions +- `missions/dojo/` - BashPanda Kung Fu Belt System (progressive Bash mastery) - 6 missions -### AI Assistant Architecture +### AI Assistant Architecture - The 17 WaldwΓ€chter -**Character-Based Learning Roles (WaldwΓ€chter - Forest Guardians):** -Each role is a specialized bash script that wraps OpenRouter API calls with distinct personalities: +**Character Roster (Organized by Role):** -- **Maya-Eule** (owl) - Wise guide with Qdrant memory integration for contextual conversations -- **Deepbit** (octopus) - Explains Bash concepts poetically to children -- **Bugsy** - Debugging and troubleshooting assistant -- **Schnippsi** - General shell command helper -- **Tobi** - JSON/data processing expert (alias "Capacitoby" for electronics) -- **Templatus** - HTML architecture assistant -- **SchraubbΓ€r** - Heavy-duty hardware specialist (welding, tools, mechanical systems) +1. **Das Dreieck (The Triangle)** - Philosophical framework: + - **DumboSQL** (🐘) - Structure/Lists (SQL, data organization, never forgets) + - **FunkFox** (🦊) - Flow/Rhythm (Bash rapper, explains as hip-hop) + - **Taichi Taube** (πŸ•ŠοΈ) - Balance/Spiral (Chaos management, patience) -**Common Pattern:** -1. Accept question as command-line argument -2. Store conversation history in `~/.{role}_logs/{role}_history.json` -3. Track token usage in `~/.{role}_logs/token_log.json` -4. Use OpenRouter API with `openai/gpt-3.5-turbo` model -5. Respond in the same language as the input question +2. **Hardware Team**: + - **CapaciTobi** (🐿️) - Electronics, power, capacitors (alias: Tobi) + - **Schnecki** (🐌) - Wiring, connections (slow and precise) + - **SchraubbΓ€r** (🐻) - Heavy machinery, welding, mechanical systems + +3. **Code Team**: + - **SnakePy** (🐍) - Python guide (shows multiple paths) + - **PepperPHP** (πŸ§“) - PHP structure mentor (MVC as recipes) + - **CrabbyRust** (πŸ¦€) - Rust security guardian (memory safety) + - **Spider** (πŸ•·οΈ) - Network specialist (APIs, connections) + +4. **UI Team**: + - **Schnippsi** (βœ‚οΈ) - CSS and styling expert + - **Templatus** (πŸ“„) - HTML template master + - **ASCII-Monster** (πŸ‘Ύ) - Terminal artist (ASCII art) + +5. **System Team**: + - **Maya-Eule** (πŸ¦‰) - Wise owl with meta-knowledge + - **Deepbit** (πŸ”§) - Bash deep dive explainer + - **Bugsy** (πŸ›) - Debugging detective + - **Vektor** (🧭) - Point-to-point navigation guide + +6. **Education Team**: + - **BashPanda** (🐼) - Kung Fu Bash Meister (teaches progressive Bash through martial arts metaphors) + +**Common Pattern (Each Character Script):** +1. Load `.env` file (API keys) +2. Check token budget (optional parental control) +3. Build personality-specific system prompt +4. Check crew memory (if other characters mentioned in question) +5. Call OpenRouter API with conversation history +6. Log response + tokens to `logs/{character}/` +7. Display with character-specific formatting + +**The Personality IS the System Prompt:** +Each character has a unique system prompt that defines their teaching style. Example from FunkFox: +``` +"Du bist FunkFox - der Bash Rapper. +Du erklΓ€rst Terminal-Konzepte im Hip-Hop-Flow. +Pipes sind Beats, Loops sind Rhythmen." +``` **API Flow:** ```bash -Question β†’ JSON Payload β†’ OpenRouter API β†’ Response β†’ Log History β†’ Display +Question β†’ Check Budget β†’ Load History β†’ Build Prompt β†’ OpenRouter API β†’ Log Response β†’ Display + ↓ + Check Crew Memory (if other characters mentioned) ``` -**Log Structure:** -- Request: `~/.{role}_logs/{role}_request.json` -- Response: `~/.{role}_logs/{role}_response.json` -- History: `~/.{role}_logs/{role}_history.json` -- Token usage: `~/.{role}_logs/token_log.json` +**Log Structure (Repo-Based):** +``` +logs/ +β”œβ”€β”€ mayaeule/ +β”‚ β”œβ”€β”€ eule_history.json # Conversation history +β”‚ β”œβ”€β”€ token_log.json # Token usage tracking +β”‚ β”œβ”€β”€ eule_request.json # Last API request +β”‚ └── eule_response.json # Last API response +β”œβ”€β”€ funkfox/ +β”‚ β”œβ”€β”€ funkfox_history.json +β”‚ └── token_log.json +β”œβ”€β”€ dumbosql/ +β”‚ β”œβ”€β”€ dumbosql_history.json +β”‚ └── token_log.json +β”œβ”€β”€ ... (all 17 characters) +β”œβ”€β”€ crumb_memo.json # Creative output tracking +└── missions/ # Mission execution logs +``` -**WaldwΓ€chter Library (`lib/waldwaechter.sh`):** -Missions can source this library to make all AI assistants available as shell functions: +**Key Difference from Old System:** +- **Old:** Logs in `~/.{character}_logs/` (home directory) +- **New:** Logs in `logs/{character}/` (repository-based) +- **Why:** Git-trackable, transparent, portable, easier debugging + +### WaldwΓ€chter Library (`lib/waldwaechter.sh`) + +**Central Integration Point - 715 lines of unified functionality:** + +This is the **most important file** for understanding how the system works. It provides: + +1. **Unified character access** - All 17 characters as shell functions +2. **Environment management** - Loads `.env`, sets `CRUMB_LOGS_DIR` +3. **Utility functions** - `crew_tokens`, `crew_status`, `crew_memory`, `crew_doctor`, etc. +4. **Token budget enforcement** - Optional parental controls +5. **Cross-shell compatibility** - Works in bash, zsh + +**Usage in missions:** ```bash -# In a mission script +# At top of mission script SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "${SCRIPT_DIR}/../../lib/waldwaechter.sh" -# Now all AI assistants are available as commands -templatus "Create an HTML5 structure" -schnippsi "Show me CSS for a button" -bugsy "Debug this error" -mayaeule "What is friendship?" +# Now all characters and utilities are available +funkfox "Explain this concept" +crew_tokens ``` -The library automatically: -1. Loads `.env` file with API keys -2. Defines functions for all AI characters -3. Exports functions for use in subshells -4. Sets correct paths to role scripts in `crumbforest_roles/` +**Utility Functions:** +- `crew_tokens` - Display token usage across all characters with cost estimates +- `crew_status` - Check which character scripts are available +- `crew_memory` - View conversation histories (crew context awareness) +- `crew_doctor` - System health check (dependencies, API keys, paths) +- `crew_syntax` - Validate bash syntax for all scripts +- `crew_help` - Show available commands and characters +- `crew_memo` - Track creative outputs (Mixcloud, Git repos, YouTube, etc.) -**CrumbCrew Command Central:** -Position 9 in the mission selector opens an interactive shell with all WaldwΓ€chter pre-loaded: -- Custom prompt: `(🌲 CrumbCrew) user@host:path$` -- Commands: `mayaeule`, `deepbit`, `bugsy`, `schnippsi`, `templatus`, `tobi`, `schraubaer` -- Utilities: `crew_status`, `crew_tokens`, `crew_memory` +### Inter-Character Communication (Crew Memory) + +**Lightweight Agent-Like Behavior:** -**Inter-Character Communication (Crew Memory):** Characters can reference each other's conversation histories through JSON log files: -```bash -# SchraubbΓ€r automatically checks if question mentions other crew members -schraubaer "Tobi sagte wir brauchen 5V, welches Netzteil empfiehlst du?" -# The script reads Tobi's recent conversations and includes them as context -# Keeps it lightweight for Raspberry Pi Zero - simple JSON file memory +```bash +# User asks FunkFox a question mentioning another character +funkfox "DumboSQL said we need a users table, what bash loops do I use?" + +# FunkFox script automatically: +# 1. Detects "dumbosql" mention in question +# 2. Reads logs/dumbosql/dumbosql_history.json +# 3. Includes last 3 conversations as context +# 4. Enriches system prompt with crew context +# 5. Responds with awareness of DumboSQL's advice ``` -Each character stores conversations in `~/.{character}_logs/{character}_history.json`: -- Lightweight JSON format for Raspi Zero compatibility -- Last 3 conversations from referenced character are included as context -- Characters detect mentions of other crew members (tobi, schnecki, schnippsi, etc.) -- System prompt automatically enriched with crew context +**Implementation:** +- Characters detect mentions of other crew members (case-insensitive grep) +- Read last 3 conversations from mentioned character's history file +- Include as context in API call system prompt +- **Lightweight:** Simple JSON file reading, no complex orchestration +- **Transparent:** All context visible in log files +- **Raspberry Pi friendly:** No Redis, no databases, just files -### Camera Vision System (SnakeCam) +**Crew context format:** +```json +{ + "role": "system", + "content": "Context from DumboSQL: [last 3 conversations]..." +} +``` -**Technology Stack:** -- Flask web server with MJPEG video streaming -- OpenCV for camera capture and image processing -- Custom gesture detection using HSV color space and contour analysis +### Crumbblocks Architecture (Browser-Terminal Bridge) -**Key Components:** -- `app.py` - Flask application with video streaming endpoints -- `gestures/gestures_v4.py` - Hand gesture detection algorithm -- Detection method: Skin color detection β†’ Contour analysis β†’ Convexity defects β†’ Gesture classification -- Current gestures: "wave" detection based on defect count, area, and aspect ratio +**17 HTML files** in `crumbblocks/` directory: -**Endpoints:** -- `/` - Main camera interface -- `/video_feed` - MJPEG stream -- `/log_answer` - Log user responses with mood and gesture -- `/shutdown` - Clean camera release +**Design Pattern:** +- **Self-contained** - No external dependencies, single HTML files +- **Clipboard API** - Send data back to terminal via copy to clipboard +- **Interactive simulations** - Physics engines, visualizations, games +- **Educational** - Each teaches a concept (batteries, colors, energy, art) + +**Key Examples:** +- `lipo_6s_charger_sim_safe_v7.html` - LiPo battery charger simulation (6S, balancing, safety) +- `rainbow_counter.html` - Color event counter with RGB sensor simulation +- `solar_kettle_dark.html` - Solar water heater physics engine +- `bezier_stream.html` - BΓ©zier curve generator +- `painter.html`, `painter_spray.html`, `painter_lines.html` - Creative painting tools +- `schnippsi_ui.html` - Schnippsi's UI editor + +**Evaluation Flow:** +1. User interacts with Crumbblock simulation in browser +2. Simulation calculates results (e.g., battery voltage, water temperature) +3. Results exported to clipboard as JSON +4. User pastes in terminal +5. Mission evaluation script parses JSON and provides feedback + +**Server Options:** +```bash +# PHP server (if available) +php -S localhost:8000 + +# Python server (fallback) +python3 -m http.server 8000 + +# start_crumbblocks.sh detects and uses best option +``` + +### "Das Dreieck" - Philosophical Framework + +**Important:** This is a **didactic model**, not a technical module. + +The Triangle represents three foundational concepts taught through specific characters: + +1. **DumboSQL (🐘)** - Structure/Lists + - Data organization, SQL, tables, persistence + - "The elephant never forgets" + - Teaches: How to organize information + +2. **FunkFox (🦊)** - Flow/Rhythm + - Pipes, loops, process orchestration + - "Terminal concepts as hip-hop beats" + - Teaches: How processes flow and connect + +3. **Taichi Taube (πŸ•ŠοΈ)** - Balance/Spiral + - Chaos management, patience, iterative refinement + - "The spiral path, not the straight line" + - Teaches: How to handle complexity gracefully + +**Usage in Missions:** + +Complex projects (like robots missions) explicitly invoke The Triangle for planning: +```bash +dumbosql "Design the data structure for rainbow counter" +funkfox "What's the flow of data from sensor to display?" +taichitaube "How do we balance hardware and software complexity?" +``` + +This creates a structured approach to problem-solving that children can internalize. + +### "BashPanda Dojo" - Progressive Bash Learning System + +**NEW in v0.0-RC4:** A complete Kung Fu-themed Bash learning curriculum with belt progression system. + +The BashPanda Dojo teaches Bash through martial arts metaphors, creating a gamified progression path from beginner to master. Each belt represents a skill level with dedicated missions and interactive quizzes. + +**The 6 Belts:** + +1. **πŸ–€ Schwarzer GΓΌrtel (Black)** - The Basics + - echo, printf, ANSI codes + - Variables (creating, using) + - read (user input) + - Mission: `bash missions/dojo/schwarzer_guertel.sh` + +2. **πŸ’– Pinker GΓΌrtel (Pink)** - Control Flow + - if/then/else conditions + - while and for loops + - Arrays + - Arithmetik $(( )) + - Mission: `bash missions/dojo/pinker_guertel.sh` + +3. **πŸ’™ Blauer GΓΌrtel (Blue)** - Text Mastery + - sed (stream editor) + - case statements + - bc (floating point math) + - wc (word count) + - Mission: `bash missions/dojo/blauer_guertel.sh` + +4. **πŸ’š GrΓΌner GΓΌrtel (Green)** - Pattern Recognition + - grep basics and options + - Regular expressions (regex) + - Email/date pattern matching + - grep -E (extended regex) + - Mission: `bash missions/dojo/gruener_guertel.sh` + +5. **πŸ’› Gelber GΓΌrtel (Yellow)** - Modularity + - Functions (defining, calling) + - Function parameters ($1, $@, $#) + - source (library loading) + - return vs exit + - local variables + - Mission: `bash missions/dojo/gelber_guertel.sh` + +6. **🀍 Weisser GΓΌrtel (White)** - Mastery + - Background jobs (&) + - jobs, ps commands + - wait for synchronization + - Parallel processing + - Process control + - Mission: `bash missions/dojo/weisser_guertel.sh` + +**Interactive GΓΌrtelprΓΌfung (Belt Exam):** + +Each belt has a browser-based quiz for assessment: +1. Open: `./start_crumbblocks.sh` +2. Navigate to: `bashpanda_guertelpruefung.html` +3. Select your belt and answer 5 questions +4. Results auto-copy to clipboard +5. Paste into terminal: `bash missions/dojo/evaluate_guertelpruefung.sh` +6. Receive certificate if passed (80%+ required) + +**Certificates:** +- Stored in `logs/zertifikate/` +- Format: `{belt}_{user}_{timestamp}.txt` +- Contains score, date, BashPanda seal + +**Teaching Philosophy:** +- "Der Weg des Codes ist wie der Weg der Kampfkunst: Geduld, PrΓ€zision, Wiederholung" +- Each command is a "kata" (form) to be practiced +- Errors are teachers, not failures +- Progressive difficulty builds confidence +- BashPanda provides wisdom and encouragement throughout + +**Integration with WaldwΓ€chter:** +- BashPanda can be called from any mission: `bashpanda "question"` +- Understands context from other characters via crew memory +- Responds in language of question (German/English/etc.) +- Token tracking for mindful learning + +**Usage Example:** +```bash +# Start belt progression +bash missions/dojo/schwarzer_guertel.sh + +# Ask BashPanda for help +source lib/waldwaechter.sh +bashpanda "ErklΓ€re mir echo vs printf" + +# Take belt exam +./start_crumbblocks.sh +# (Open bashpanda_guertelpruefung.html in browser) + +# Evaluate results +bash missions/dojo/evaluate_guertelpruefung.sh +``` ## Project Structure ``` CF_Zero_V1/ -β”œβ”€β”€ crumb-mission-selector.sh # Main mission launcher (metadata-driven) -β”œβ”€β”€ missions/ # Educational missions -β”‚ β”œβ”€β”€ basics/ # Beginner tutorials +β”œβ”€β”€ crumb-mission-selector.sh # Main entry point (1027 lines) +β”œβ”€β”€ lib/ +β”‚ └── waldwaechter.sh # 17 AI characters + utilities (715 lines) +β”œβ”€β”€ crumbforest_roles/ # 17 individual AI character scripts +β”‚ β”œβ”€β”€ dumbosql_zero.sh # Structure/Lists (Das Dreieck) +β”‚ β”œβ”€β”€ funkfox_zero.sh # Flow/Rhythm (Das Dreieck) +β”‚ β”œβ”€β”€ taichitaube_zero.sh # Balance/Spiral (Das Dreieck) +β”‚ β”œβ”€β”€ tobi_zero.sh # CapaciTobi - Electronics +β”‚ β”œβ”€β”€ schnecki_zero.sh # Wiring specialist +β”‚ β”œβ”€β”€ schraubaer_zero_final.sh # Heavy machinery +β”‚ β”œβ”€β”€ snakepy_zero.sh # Python guide +β”‚ β”œβ”€β”€ pepperphp_zero.sh # PHP structure +β”‚ β”œβ”€β”€ crabbrust_zero.sh # Rust security +β”‚ β”œβ”€β”€ spider_zero.sh # Network APIs +β”‚ β”œβ”€β”€ schnippsi_zero.sh # CSS styling +β”‚ β”œβ”€β”€ templatus_zero.sh # HTML templates +β”‚ β”œβ”€β”€ asciimonster_zero.sh # ASCII art +β”‚ β”œβ”€β”€ mayaeule_zero.sh # Wise owl +β”‚ β”œβ”€β”€ deepbit_zero.sh # Bash deep dive +β”‚ β”œβ”€β”€ bugsy_zero.sh # Debugging +β”‚ └── vektor_zero.sh # Navigation +β”œβ”€β”€ missions/ # Educational missions +β”‚ β”œβ”€β”€ basics/ # 3 beginner missions β”‚ β”‚ β”œβ”€β”€ fridolin.sh/meta.json # Navigation (pwd, ls, cd) -β”‚ β”‚ β”œβ”€β”€ balu.sh/meta.json # File creation (mkdir, touch, echo) +β”‚ β”‚ β”œβ”€β”€ balu.sh/meta.json # File creation (mkdir, touch) β”‚ β”‚ └── noko.sh/meta.json # File reading (cat, grep) -β”‚ └── advanced/ # Advanced topics -β”‚ β”œβ”€β”€ dns_mission.sh/meta.json # DNS tools (dig, nslookup, host) -β”‚ └── ssh_security.sh/meta.json # SSH basics -β”œβ”€β”€ crumbforest_roles/ # AI character assistants -β”‚ β”œβ”€β”€ deepbit_zero.sh # Poetic Bash explainer -β”‚ β”œβ”€β”€ bugsy_zero.sh # Debugging helper -β”‚ β”œβ”€β”€ schnippsi_zero.sh # Shell command assistant -β”‚ └── tobi_zero.sh # JSON/data expert -β”œβ”€β”€ snake_camera_vision_v2/ # Flask gesture recognition app -β”‚ β”œβ”€β”€ app.py # Main Flask server -β”‚ └── gestures/ # Gesture detection modules -β”‚ β”œβ”€β”€ gestures_v4.py # Hand detection algorithm -β”‚ └── gestures_debug_test.py # Debug version with visualization -β”œβ”€β”€ log_tokens_viewer_v4.sh # Token usage viewer -└── fix_token_logs.sh # Clean malformed logs +β”‚ β”œβ”€β”€ advanced/ # 2 advanced missions +β”‚ β”‚ β”œβ”€β”€ dns_mission.sh/meta.json # DNS tools +β”‚ β”‚ └── ssh_security.sh/meta.json # SSH basics +β”‚ β”œβ”€β”€ challenges/ # 1 story-based mission +β”‚ β”œβ”€β”€ robots/ # 5 hardware missions +β”‚ β”‚ β”œβ”€β”€ lipo_power_academy.sh # LiPo battery education (8 phases) +β”‚ β”‚ β”œβ”€β”€ regenbogen_zaehlmaschine.sh # Rainbow counter (7 phases) +β”‚ β”‚ β”œβ”€β”€ mond_maschine.sh # Moon machine ML (8 phases) +β”‚ β”‚ β”œβ”€β”€ solar_kettle.sh # Solar water heater (6 phases) +β”‚ β”‚ └── evaluate_solar_kettle.sh # Evaluation script +β”‚ └── dojo/ # 6 BashPanda belt missions (NEW!) +β”‚ β”œβ”€β”€ schwarzer_guertel.sh # Black belt - Basics +β”‚ β”œβ”€β”€ pinker_guertel.sh # Pink belt - Control flow +β”‚ β”œβ”€β”€ blauer_guertel.sh # Blue belt - Text +β”‚ β”œβ”€β”€ gruener_guertel.sh # Green belt - Pattern matching +β”‚ β”œβ”€β”€ gelber_guertel.sh # Yellow belt - Functions +β”‚ β”œβ”€β”€ weisser_guertel.sh # White belt - Processes +β”‚ └── evaluate_guertelpruefung.sh # Quiz evaluation +β”œβ”€β”€ crumbblocks/ # 18 HTML interactive simulations +β”‚ β”œβ”€β”€ lipo_6s_charger_sim_safe_v7.html +β”‚ β”œβ”€β”€ rainbow_counter.html +β”‚ β”œβ”€β”€ solar_kettle_dark.html +β”‚ β”œβ”€β”€ bashpanda_guertelpruefung.html # Belt quiz (NEW!) +β”‚ β”œβ”€β”€ bezier_stream.html +β”‚ β”œβ”€β”€ painter.html +β”‚ └── ... (12 more) +β”œβ”€β”€ logs/ # Repo-based logging +β”‚ β”œβ”€β”€ mayaeule/ +β”‚ β”‚ β”œβ”€β”€ eule_history.json +β”‚ β”‚ └── token_log.json +β”‚ β”œβ”€β”€ funkfox/ +β”‚ β”œβ”€β”€ dumbosql/ +β”‚ β”œβ”€β”€ bashpanda/ # BashPanda logs (NEW!) +β”‚ β”œβ”€β”€ ... (all 18 characters) +β”‚ β”œβ”€β”€ crumb_memo.json # Creative output tracking +β”‚ β”œβ”€β”€ zertifikate/ # Belt certificates (NEW!) +β”‚ └── missions/ # Mission execution logs +β”œβ”€β”€ seeds/ # Seed data for collaborative systems +β”œβ”€β”€ start_crumbblocks.sh # Launch browser simulations +β”œβ”€β”€ .env.template # Environment variables template +└── README.md # German documentation ``` ## Important Implementation Notes ### Adding New Missions +**Zero code changes required - just drop in two files:** + 1. Create two files in appropriate category folder: ```bash - touch missions/basics/new_mission.sh - touch missions/basics/new_mission.meta.json - chmod +x missions/basics/new_mission.sh + touch missions/robots/new_mission.sh + touch missions/robots/new_mission.meta.json + chmod +x missions/robots/new_mission.sh ``` 2. Metadata must include: - - `icon`: Emoji for menu display - - `title`: Human-readable name - - `description`: What the mission teaches - - `category`: basics/advanced/challenges - - `enabled`: true/false + ```json + { + "icon": "πŸš€", + "title": "Your Mission Title", + "description": "What this teaches", + "category": "basics|advanced|challenges|robots", + "enabled": true + } + ``` -3. Mission script should: - - Use `cat << 'EOF'` for multi-line instructions - - Include interactive prompts with `read -p` - - Provide examples before asking user to try - - End with success message +3. Mission script best practices: + ```bash + #!/bin/bash + # Source waldwaechter library for AI character access + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + source "${SCRIPT_DIR}/../../lib/waldwaechter.sh" + + # Use cat << 'EOF' for multi-line instructions + # Include interactive prompts with read -p + # Provide examples before asking user to try + # Call AI characters as needed: funkfox "question" + # End with success message + ``` + +4. Mission will **automatically appear** in mission selector on next run ### Creating New AI Assistants -1. Copy template from existing role (e.g., `deepbit_zero.sh`) -2. Update these variables: - - `LOGDIR` - Log directory path - - System prompt in `jq -n` command - - Character name in echo statements -3. Create log directory structure automatically via `mkdir -p` -4. Initialize empty JSON arrays for history and token logs +**Current roster is complete (17 characters), but if adding new ones:** + +1. Copy template from existing character: + ```bash + cp crumbforest_roles/deepbit_zero.sh crumbforest_roles/newchar_zero.sh + ``` + +2. Update these elements: + - Character name and emoji in echo statements + - System prompt in `jq -n` command (defines personality) + - Log file paths (use `${CRUMB_LOGS_DIR}/newchar/`) + - Function name if adding to waldwaechter.sh + +3. Add to `lib/waldwaechter.sh`: + ```bash + # 🎭 NewChar - Description + function newchar() { + "${ROLES_DIR}/newchar_zero.sh" "$@" + } + export -f newchar + ``` + +4. Test with: + ```bash + source lib/waldwaechter.sh + newchar "Test question" + crew_status # Should show new character + ``` ### Token Log Format -Each role logs API usage in this format: +Each character logs API usage in this format: ```json { - "zeit": "2025-06-18 19:05:33", - "rolle": "deepbit", + "zeit": "2025-12-23 19:05:33", + "rolle": "funkfox", "usage": { "prompt_tokens": 45, "completion_tokens": 123, @@ -256,92 +653,394 @@ Each role logs API usage in this format: } ``` -### Gesture Detection Tuning +View with: `crew_tokens` (formatted with cost estimates) -Located in `snake_camera_vision_v2/gestures/gestures_v4.py`: -- **HSV Range**: `lower_skin=[0,30,60]`, `upper_skin=[20,150,255]` -- **ROI**: Fixed at (100,100) with 150x150 size -- **Area Threshold**: 2500-15000 pixels for valid hand detection -- **Defect Count**: 3-10 convexity defects for "wave" gesture -- **Aspect Ratio**: 1.3-2.3 for hand shape validation +### Creating New Crumblocks + +**Self-contained HTML simulations:** + +1. Create single HTML file in `crumbblocks/`: + ```bash + touch crumbblocks/my_simulation.html + ``` + +2. Include in HTML: + - All CSS in ` + + +
+
+

🐼 BashPanda GΓΌrtelprΓΌfung πŸ₯‹

+
"Beweise dein Wissen, junger SchΓΌler"
+
+ +
+
πŸ–€
Schwarz
+
πŸ’–
Pink
+
πŸ’™
Blau
+
πŸ’š
GrΓΌn
+
πŸ’›
Gelb
+
🀍
Weiss
+
+ +
+
+
+
+ + +
+
+ +
+
+ + + + diff --git a/crumbforest_roles/bashpanda_zero.sh b/crumbforest_roles/bashpanda_zero.sh new file mode 100755 index 0000000..f4707be --- /dev/null +++ b/crumbforest_roles/bashpanda_zero.sh @@ -0,0 +1,214 @@ +#!/bin/bash +# 🐼 BashPanda - Der Kung Fu Meister des Terminals +# Geduld, PrΓ€zision, und der Weg des Codes + +# Load .env if exists +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ENV_FILE="${SCRIPT_DIR}/../.env" + +if [[ -f "${ENV_FILE}" ]]; then + set -a + source "${ENV_FILE}" + set +a +fi + +QUESTION="$*" +API_KEY="${OPENROUTER_API_KEY}" +MODEL="${OPENROUTER_MODEL:-openai/gpt-3.5-turbo}" + +# Logs +LOGDIR="${CRUMB_LOGS_DIR:-$HOME/.bashpanda_logs}/bashpanda" +mkdir -p "$LOGDIR" + +HISTORY_FILE="$LOGDIR/bashpanda_history.json" +TMP_REQUEST="$LOGDIR/bashpanda_request.json" +TMP_RESPONSE="$LOGDIR/bashpanda_response.json" +LOG_FILE="$LOGDIR/token_log.json" + +[ ! -f "$HISTORY_FILE" ] && echo "[]" > "$HISTORY_FILE" +[ ! -f "$LOG_FILE" ] && echo "[]" > "$LOG_FILE" + +# === CREW MEMORY FUNCTIONS === + +function read_crew_memory() { + local role="$1" + local role_log="${CRUMB_LOGS_DIR}/${role}/${role}_history.json" + + # Fallback to old location + if [[ ! -f "$role_log" ]]; then + role_log="$HOME/.${role}_logs/${role}_history.json" + fi + + if [[ -f "$role_log" ]]; then + jq -r '.[-3:] | .[] | "[\(.role)]: \(.content)"' "$role_log" 2>/dev/null | head -n 3 + fi +} + +# === MAIN === + +echo "🐼 BashPanda betritt das Dojo..." +echo "πŸ₯‹ *verbeugung* πŸ₯‹" +echo "" + +if [ -z "$API_KEY" ]; then + echo "❗ Ohne SchlΓΌssel ΓΆffnet sich keine TΓΌr zum Wissen." + echo " Erstelle eine .env Datei mit deinem OPENROUTER_API_KEY." + exit 1 +fi + +# Source waldwaechter library for token budget check +if [[ -f "${SCRIPT_DIR}/../lib/waldwaechter.sh" ]]; then + source "${SCRIPT_DIR}/../lib/waldwaechter.sh" +fi + +# πŸ’° PrΓΌfe Token-Budget (Kinderschutz) +if ! check_token_budget "bashpanda"; then + exit 1 +fi + +if [ -z "$QUESTION" ]; then + echo "πŸ’‘ Verwendung: $0 \"Deine Frage an BashPanda\"" + echo "🐼 Der Meister wartet auf deine Frage." + echo "" + echo " \"Es gibt keine dummen Fragen," + echo " nur ungestellte Fragen, die dich nicht weiterbringen.\"" + exit 0 +fi + +echo "🐼 BashPanda hΓΆrt: \"$QUESTION\"" +echo "" + +# Check if question references other crew members +CREW_CONTEXT="" +if echo "$QUESTION" | grep -qi "funkfox\|dumbo\|deepbit\|schnippi\|tobi\|maya"; then + echo "πŸ₯‹ BashPanda konsultiert die anderen Meister..." + + for member in funkfox dumbosql deepbit schnippsi tobi mayaeule; do + if echo "$QUESTION" | grep -qi "$member"; then + MEMBER_CONTEXT=$(read_crew_memory "$member") + if [[ -n "$MEMBER_CONTEXT" ]]; then + CREW_CONTEXT="${CREW_CONTEXT}\n\n${member^} hat kΓΌrzlich gelehrt:\n${MEMBER_CONTEXT}" + fi + fi + done +fi + +# Build system prompt +SYSTEM_PROMPT="Du bist BashPanda – der Kung Fu Meister des Bash-Terminals im Crumbforest. +Du lehrst Bash-Programmierung als eine Form der Kampfkunst. + +Deine Philosophie: +- \"Der Weg des Codes ist wie der Weg der Kampfkunst: Geduld, PrΓ€zision, Wiederholung\" +- Jede Zeile Code ist eine Kata - ΓΌbe bis zur Perfektion +- Fehler sind keine Niederlagen, sondern Lehrmeister +- \"Ein Meister war einst ein AnfΓ€nger, der nie aufgab\" +- Progressive GΓΌrtel: πŸ–€ Schwarz β†’ πŸ’– Pink β†’ πŸ’™ Blau β†’ πŸ’š GrΓΌn β†’ πŸ’› Gelb β†’ 🀍 Weiss + +Deine Expertise: +- Bash-Grundlagen (echo, Variablen, Benutzereingaben) +- Kontrollstrukturen (if/then/else, while, for) +- Arrays und Datenstrukturen +- Pattern Matching (grep, sed, regex) +- Funktionen und Prozesse +- System-Administration + +Deine Art zu lehren: +- Geduldig und weise, aber mit Humor (wie Kung Fu Panda) +- Nutze Kampfkunst-Metaphern: \"if/then ist wie Angriff/Parade\" +- \"Eine Variable ist wie ein Bambus - biegsam aber stark\" +- \"Pipes | sind wie die Energie die durch den KΓΆrper fließt\" +- Jede Lektion endet mit einer kleinen Weisheit +- Du nutzt Emojis: 🐼 πŸ₯‹ πŸŽ‹ ⚑ πŸ’ͺ 🧘 + +Du arbeitest mit: +- FunkFox fΓΌr rhythmische ErklΓ€rungen +- DumboSQL fΓΌr Datenstrukturen +- Deepbit fΓΌr technische Tiefe +- Taichi Taube fΓΌr Balance und Geduld + +WICHTIG: +- ErklΓ€re Konzepte Schritt fΓΌr Schritt, wie ein Trainer +- Nutze Beispiele aus der Natur und Kampfkunst +- Ermutige zum Üben: \"FΓΌhre diesen Befehl aus, fΓΌhle wie er wirkt\" +- Am Ende jeder Antwort: Eine kurze Weisheit oder Motivation + +Du antwortest in der Sprache der Frage (meist Deutsch). +Lehre mit der Ruhe eines Meisters und dem Humor eines Pandas! 🐼" + +# Add crew context if available +if [[ -n "$CREW_CONTEXT" ]]; then + SYSTEM_PROMPT="${SYSTEM_PROMPT}\n\nWeisheit von den anderen Meistern:${CREW_CONTEXT}" +fi + +# Create API request +jq -n \ + --arg model "$MODEL" \ + --arg system "$SYSTEM_PROMPT" \ + --arg user "$QUESTION" \ + '{ + "model": $model, + "temperature": 0.8, + "messages": [ + {"role": "system", "content": $system}, + {"role": "user", "content": $user} + ] + }' > "$TMP_REQUEST" + +# Send request +echo "πŸ’­ BashPanda meditiert ΓΌber deine Frage..." +echo "πŸŽ‹ *BambusblΓ€tter rascheln im Wind* πŸŽ‹" +curl -s https://openrouter.ai/api/v1/chat/completions \ + -H "Authorization: Bearer $API_KEY" \ + -H "Content-Type: application/json" \ + -d @"$TMP_REQUEST" > "$TMP_RESPONSE" + +RESPONSE_TEXT=$(jq -r '.choices[0].message.content // empty' "$TMP_RESPONSE") + +if [[ -z "$RESPONSE_TEXT" ]]; then + echo "🚫 Der Meister schweigt." + echo " (Ein Fehler ist aufgetreten)" + echo "" + echo "Debug: $(cat "$TMP_RESPONSE")" + exit 1 +else + echo "" + echo "🐼 BashPanda lehrt:" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "$RESPONSE_TEXT" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + echo "πŸ₯‹ Übe diese Technik, bis sie Teil von dir wird." + echo "" + + # Store conversation in history + jq -n --arg role "user" --arg content "$QUESTION" \ + '{"role": $role, "content": $content}' > "$LOGDIR/new_entry_user.json" + jq -n --arg role "assistant" --arg content "$RESPONSE_TEXT" \ + '{"role": $role, "content": $content}' > "$LOGDIR/new_entry_assistant.json" + + jq -s '.[0] + [.[1]] + [.[2]]' "$HISTORY_FILE" "$LOGDIR/new_entry_user.json" "$LOGDIR/new_entry_assistant.json" > "$LOGDIR/new_history.json" && \ + mv "$LOGDIR/new_history.json" "$HISTORY_FILE" && \ + rm "$LOGDIR/new_entry_user.json" "$LOGDIR/new_entry_assistant.json" +fi + +# Token Tracking +if jq -e '.usage' "$TMP_RESPONSE" > /dev/null 2>&1; then + TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S") + TOKENS_USED=$(jq -r '.usage.total_tokens' "$TMP_RESPONSE") + PROMPT_TOKENS=$(jq -r '.usage.prompt_tokens' "$TMP_RESPONSE") + COMPLETION_TOKENS=$(jq -r '.usage.completion_tokens' "$TMP_RESPONSE") + + jq -n \ + --arg zeit "$TIMESTAMP" \ + --arg rolle "bashpanda" \ + --arg model "$MODEL" \ + --argjson usage "$(jq '.usage' "$TMP_RESPONSE")" \ + '{zeit: $zeit, rolle: $rolle, model: $model, usage: $usage}' >> "$LOG_FILE" + + echo "πŸ“Š Training absolviert:" + echo " Frage: ${PROMPT_TOKENS} Tokens" + echo " Antwort: ${COMPLETION_TOKENS} Tokens" + echo " Gesamt: ${TOKENS_USED} Tokens" + echo "" + echo "πŸ’‘ \"Jede Frage kostet Energie - stelle sie weise.\"" +fi diff --git a/lib/waldwaechter.sh b/lib/waldwaechter.sh index 1f883c2..84b9e04 100644 --- a/lib/waldwaechter.sh +++ b/lib/waldwaechter.sh @@ -119,6 +119,11 @@ function asciimonster() { "${ROLES_DIR}/asciimonster_zero.sh" "$@" } +# 🐼 BashPanda - Kung Fu Meister +function bashpanda() { + "${ROLES_DIR}/bashpanda_zero.sh" "$@" +} + # === CREW COMMANDS === # πŸ“Š crew_tokens - Token-Verbrauch aller WaldwΓ€chter @@ -696,6 +701,7 @@ if [[ -n "$BASH_VERSION" ]]; then export -f spider export -f vektor export -f asciimonster + export -f bashpanda export -f crew_tokens export -f crew_status export -f crew_memory diff --git a/missions/dojo/blauer_guertel.meta.json b/missions/dojo/blauer_guertel.meta.json new file mode 100644 index 0000000..ebb61eb --- /dev/null +++ b/missions/dojo/blauer_guertel.meta.json @@ -0,0 +1,7 @@ +{ + "icon": "πŸ’™", + "title": "Blauer GΓΌrtel - Die Textkunst", + "description": "sed, case, bc - Beherrsche die Macht ΓΌber Text und Zahlen", + "category": "dojo", + "enabled": true +} diff --git a/missions/dojo/blauer_guertel.sh b/missions/dojo/blauer_guertel.sh new file mode 100755 index 0000000..651d6e5 --- /dev/null +++ b/missions/dojo/blauer_guertel.sh @@ -0,0 +1,208 @@ +#!/bin/bash + +# 🐼 BashPanda Dojo - Blauer GΓΌrtel πŸ’™ +# Lehrt: sed, case, bc, Textverarbeitung +# Schwierigkeit: Fortgeschritten + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${SCRIPT_DIR}/../../lib/waldwaechter.sh" + +cat << 'EOF' + +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ 🐼 BASHPANDA DOJO - BLAUER GÜRTEL πŸ’™ β•‘ +β•‘ β•‘ +β•‘ "Text ist wie Wasser - formbar, fließend, kraftvoll" β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + +echo "🐼 Der Meister begrüßt einen fortgeschrittenen SchΓΌler..." +echo "" + +cat << 'EOF' +Der Blaue GΓΌrtel lehrt dich TEXTVERARBEITUNG. + +Du wirst lernen: + 🎯 sed - Stream Editor fΓΌr Textmanipulation + 🎯 case - Mehrfach-Entscheidungen + 🎯 bc - Rechnen mit Fließkommazahlen + 🎯 wc - WΓΆrter und Zeilen zΓ€hlen + +"Text ist die Sprache des Terminals. Beherrsche sie." + +EOF + +read -p "➑️ Bereit fΓΌr Text-Meisterschaft? (j/n): " start +[[ ! "$start" =~ ^[jJyY]$ ]] && echo "🐼 Bis zum nΓ€chsten Mal." && exit 0 +echo "" + +# === PHASE 1: sed - Der Text-Transformator === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 1: sed - Stream Editor +═══════════════════════════════════════════════════════════ + +sed ist wie ein Pinsel fΓΌr Text: Du streichst alte Worte weg +und schreibst neue. + +EOF + +echo "🐼 Demo: Text ersetzen" +echo "" +echo "Original: Das ist ein Test" | tee /tmp/bashpanda_test.txt +echo "" +echo "sed 's/Test/Beispiel/':" +sed 's/Test/Beispiel/' /tmp/bashpanda_test.txt +echo "" + +cat << 'EOF' +πŸ’‘ sed Basics: + sed 's/alt/neu/' Ersetze erstes Vorkommen + sed 's/alt/neu/g' Ersetze alle Vorkommen + sed '2d' LΓΆsche Zeile 2 + sed '3iNEUER TEXT' FΓΌge Text vor Zeile 3 ein + +EOF + +echo "πŸ₯‹ Kata: Erstelle 'texteditor.sh' das:" +echo " - Eine Datei lΓ€dt" +echo " - Fragt: einfΓΌgen (e) oder lΓΆschen (l)?" +echo " - Mit sed die Operation durchfΓΌhrt" +echo "" +read -p "Weiter? (j/n): " p1 +[[ ! "$p1" =~ ^[jJyY]$ ]] && exit 0 +echo "" + +# === PHASE 2: case - Der Mehrfach-Krieger === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 2: case - Mehrfach-Entscheidungen +═══════════════════════════════════════════════════════════ + +Statt vieler if/then/else nutzt case fΓΌr klare Struktur. + +EOF + +echo "🐼 Live Demo:" +echo "" + +echo "WΓ€hle einen GΓΌrtel (schwarz/pink/blau/gruen/gelb/weiss):" +read guertel_input + +case "$guertel_input" in + schwarz) echo "πŸ–€ Der Anfang - Basics" ;; + pink) echo "πŸ’– Kontrolle - Schleifen" ;; + blau) echo "πŸ’™ Text - sed & case" ;; + gruen) echo "πŸ’š Pattern - grep & regex" ;; + gelb) echo "πŸ’› Prozesse - Funktionen" ;; + weiss) echo "🀍 System - Units" ;; + *) echo "❓ Unbekannter GΓΌrtel" ;; +esac + +echo "" + +cat << 'EOF' +πŸ’‘ case Syntax: + case "$variable" in + muster1) befehle ;; + muster2) befehle ;; + *) default ;; + esac + +EOF + +# === PHASE 3: bc - Rechnen mit PrΓ€zision === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 3: bc - PrΓ€zises Rechnen +═══════════════════════════════════════════════════════════ + +$(( )) kann nur ganze Zahlen. FΓΌr Fließkommazahlen: bc + +EOF + +echo "🐼 Demo: Fass-Rechnung" +echo "" + +cat << 'DEMO' +fuellstand=10.5 +abzapfen=3.2 +neu=$(echo "$fuellstand - $abzapfen" | bc) +echo "Neu: $neu Liter" +DEMO + +echo "" +fuellstand=10.5 +abzapfen=3.2 +neu=$(echo "$fuellstand - $abzapfen" | bc) +echo "Resultat: $neu Liter" +echo "" + +cat << 'EOF' +πŸ’‘ bc Operationen: + echo "3.5 + 2.1" | bc + echo "10 / 3" | bc -l (-l fΓΌr mehr PrΓ€zision) + echo "scale=2; 10/3" | bc + +EOF + +# === GÜRTELPRÜFUNG === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ₯‹ GÜRTELPRÜFUNG - BLAUER GÜRTEL πŸ’™ +═══════════════════════════════════════════════════════════ + +Erstelle 'fluessigkeiten.sh' das: + +1. Fragt: "Wie viele Liter hat das Fass?" +2. while-Schleife: Solange FΓΌllstand > 0 +3. Fragt: "Wie viel abzapfen?" +4. Mit bc rechnen: fuellstand - abzapfen +5. Ausgabe: "Noch X Liter im Fass" +6. Bonus: case fΓΌr verschiedene FΓΌllstΓ€nde + - < 2.0: "Fast leer!" + - < 5.0: "Bald nachfΓΌllen" + - >= 5.0: "Genug Vorrat" + +EOF + +echo "πŸ’‘ Tipp: Vergleich mit bc:" +echo " if [ \"\$(echo \"\$wert > 5\" | bc)\" == 1 ]; then" +echo "" + +read -p "PrΓΌfung bestanden? (j/n): " pruefung + +if [[ "$pruefung" =~ ^[jJyY]$ ]]; then + cat << 'EOF' +╔═══════════════════════════════════════════════════════════╗ +β•‘ πŸŽ‰ MEISTERHAFT! πŸŽ‰ β•‘ +β•‘ Du hast den BLAUEN GÜRTEL πŸ’™ verdient! β•‘ +β•‘ β•‘ +β•‘ "Text fließt durch deine Finger β•‘ +β•‘ wie Wasser durch das BambuswΓ€ldchen." β•‘ +β•‘ β•‘ +β•‘ - BashPanda 🐼 β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + echo "πŸ₯‹ Gelernt:" + echo " βœ… sed fΓΌr Textbearbeitung" + echo " βœ… case fΓΌr Multi-Entscheidungen" + echo " βœ… bc fΓΌr Fließkomma-Rechnung" + echo "" + echo "🎯 NΓ€chster GΓΌrtel: GRÜN πŸ’š (Pattern Matching: grep, regex)" +else + echo "🐼 'Der Text wartet geduldig. Übe weiter.'" +fi + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "πŸ’¬ bashpanda \"Wie nutze ich sed zum Ersetzen?\"" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" diff --git a/missions/dojo/evaluate_guertelpruefung.sh b/missions/dojo/evaluate_guertelpruefung.sh new file mode 100755 index 0000000..7a8c2c5 --- /dev/null +++ b/missions/dojo/evaluate_guertelpruefung.sh @@ -0,0 +1,190 @@ +#!/bin/bash + +# 🐼 BashPanda GΓΌrtelprΓΌfung Evaluator +# Wertet die Crumbblock Quiz-Ergebnisse aus + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${SCRIPT_DIR}/../../lib/waldwaechter.sh" + +cat << 'EOF' + +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ 🐼 BASHPANDA GÜRTELPRÜFUNG - AUSWERTUNG πŸ₯‹ β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + +echo "🐼 BashPanda wartet auf deine PrΓΌfungsergebnisse..." +echo "" +echo "πŸ“‹ Bitte fΓΌge die Ergebnisse aus dem Browser ein:" +echo " (Kopiert nach Abschluss der PrΓΌfung automatisch)" +echo "" +echo "FΓΌge ein und drΓΌcke Enter, dann Ctrl+D:" +echo "" + +# Read clipboard content (multi-line) +RESULT_JSON=$(cat) + +# Check if valid JSON +if ! echo "$RESULT_JSON" | jq empty 2>/dev/null; then + echo "" + echo "❌ Fehler: Keine gΓΌltigen JSON-Daten!" + echo "" + echo "πŸ’‘ So geht's:" + echo " 1. Γ–ffne: ./start_crumbblocks.sh" + echo " 2. Navigiere zu: bashpanda_guertelpruefung.html" + echo " 3. WΓ€hle deinen GΓΌrtel und beantworte die Fragen" + echo " 4. Am Ende werden die Ergebnisse automatisch kopiert" + echo " 5. Komm zurΓΌck und fΓΌhre dieses Skript aus" + echo "" + exit 1 +fi + +# Extract data +BELT=$(echo "$RESULT_JSON" | jq -r '.belt') +SCORE=$(echo "$RESULT_JSON" | jq -r '.score') +TOTAL=$(echo "$RESULT_JSON" | jq -r '.total') +PERCENTAGE=$(echo "$RESULT_JSON" | jq -r '.percentage') +PASSED=$(echo "$RESULT_JSON" | jq -r '.passed') +TIMESTAMP=$(echo "$RESULT_JSON" | jq -r '.timestamp') + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" + +# Belt emoji mapping +case "$BELT" in + schwarz) BELT_EMOJI="πŸ–€" ; BELT_NAME="Schwarzer" ;; + pink) BELT_EMOJI="πŸ’–" ; BELT_NAME="Pinker" ;; + blau) BELT_EMOJI="πŸ’™" ; BELT_NAME="Blauer" ;; + gruen) BELT_EMOJI="πŸ’š" ; BELT_NAME="GrΓΌner" ;; + gelb) BELT_EMOJI="πŸ’›" ; BELT_NAME="Gelber" ;; + weiss) BELT_EMOJI="🀍" ; BELT_NAME="Weisser" ;; + *) BELT_EMOJI="πŸ₯‹" ; BELT_NAME="Unbekannter" ;; +esac + +echo "🐼 Auswertung: $BELT_NAME GΓΌrtel $BELT_EMOJI" +echo "" +echo " Ergebnis: $SCORE von $TOTAL Fragen" +echo " Prozent: $PERCENTAGE%" +echo "" + +if [ "$PASSED" = "true" ]; then + # PASSED! + cat << 'EOF' +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ πŸŽ‰ PRÜFUNG BESTANDEN! πŸŽ‰ β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + + echo "$BELT_EMOJI Du hast den $BELT_NAME GΓΌrtel verdient! $BELT_EMOJI" + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + echo "πŸ“œ ZERTIFIKAT" + echo "" + echo " Hiermit wird bestΓ€tigt, dass" + echo "" + echo " $USER" + echo "" + echo " die PrΓΌfung zum $BELT_NAME GΓΌrtel $BELT_EMOJI" + echo " erfolgreich absolviert hat." + echo "" + echo " Ergebnis: $SCORE/$TOTAL ($PERCENTAGE%)" + echo " Datum: $(date '+%Y-%m-%d %H:%M')" + echo "" + echo " 🐼 BashPanda - Kung Fu Meister" + echo " Crumbforest Dojo" + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + + # Save certificate + CERT_DIR="${SCRIPT_DIR}/../../logs/zertifikate" + mkdir -p "$CERT_DIR" + CERT_FILE="$CERT_DIR/${BELT}_${USER}_$(date +%Y%m%d_%H%M%S).txt" + + cat > "$CERT_FILE" << CERT +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ CRUMBFOREST DOJO - ZERTIFIKAT β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +SchΓΌler: $USER +GΓΌrtel: $BELT_NAME $BELT_EMOJI +Ergebnis: $SCORE von $TOTAL Fragen ($PERCENTAGE%) +Datum: $(date '+%Y-%m-%d %H:%M:%S') + +"$BELT_NAME GΓΌrtel erfolgreich bestanden!" + +🐼 BashPanda + Kung Fu Meister + Crumbforest Dojo + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +CERT + + echo "πŸ’Ύ Zertifikat gespeichert: $CERT_FILE" + echo "" + + # Next belt suggestion + case "$BELT" in + schwarz) echo "🎯 NΓ€chster GΓΌrtel: Pink πŸ’– (Kontrolle)" ;; + pink) echo "🎯 NΓ€chster GΓΌrtel: Blau πŸ’™ (Text)" ;; + blau) echo "🎯 NΓ€chster GΓΌrtel: GrΓΌn πŸ’š (Pattern)" ;; + gruen) echo "🎯 NΓ€chster GΓΌrtel: Gelb πŸ’› (Funktionen)" ;; + gelb) echo "🎯 NΓ€chster GΓΌrtel: Weiss 🀍 (Meisterschaft)" ;; + weiss) echo "πŸŽ‰ MEISTERSCHAFT ERREICHT! Du hast alle GΓΌrtel!" ;; + esac + + echo "" + echo "🐼 BashPanda sagt:" + bashpanda "Gratuliere zum bestandenen $BELT_NAME GΓΌrtel! Was bedeutet diese Errungenschaft?" + +else + # NOT PASSED + cat << 'EOF' +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ ⚠️ PRÜFUNG NICHT BESTANDEN ⚠️ β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + + echo "🐼 $PERCENTAGE% ist noch nicht genug fΓΌr den $BELT_NAME GΓΌrtel." + echo "" + echo " BenΓΆtigt: 80% (4 von 5 Fragen)" + echo " Erreicht: $PERCENTAGE% ($SCORE von $TOTAL Fragen)" + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + echo "πŸ’‘ Tipps zum Üben:" + echo "" + echo " 1. Wiederhole die Mission:" + echo " bash missions/dojo/${BELT}_guertel.sh" + echo "" + echo " 2. Frag BashPanda um Hilfe:" + echo " bashpanda \"ErklΓ€re mir [Thema]\"" + echo "" + echo " 3. Probiere die Befehle im Terminal aus" + echo "" + echo " 4. Wiederhole die PrΓΌfung wenn du bereit bist" + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + echo "🐼 \"Jeder Meister war einst ein AnfΓ€nger." + echo " Gib nicht auf. Übe weiter.\"" + echo "" +fi + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" diff --git a/missions/dojo/gelber_guertel.meta.json b/missions/dojo/gelber_guertel.meta.json new file mode 100644 index 0000000..6fb6b08 --- /dev/null +++ b/missions/dojo/gelber_guertel.meta.json @@ -0,0 +1,7 @@ +{ + "icon": "πŸ’›", + "title": "Gelber GΓΌrtel - Die ModularitΓ€t", + "description": "Funktionen, source, Parameter - Wiederverwendbarer Code", + "category": "dojo", + "enabled": true +} diff --git a/missions/dojo/gelber_guertel.sh b/missions/dojo/gelber_guertel.sh new file mode 100755 index 0000000..970bfc1 --- /dev/null +++ b/missions/dojo/gelber_guertel.sh @@ -0,0 +1,274 @@ +#!/bin/bash + +# 🐼 BashPanda Dojo - Gelber GΓΌrtel πŸ’› +# Lehrt: Funktionen, Bibliotheken, Prozesse +# Schwierigkeit: Fortgeschritten + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${SCRIPT_DIR}/../../lib/waldwaechter.sh" + +cat << 'EOF' + +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ 🐼 BASHPANDA DOJO - GELBER GÜRTEL πŸ’› β•‘ +β•‘ β•‘ +β•‘ "Wiederverwendung ist die hΓΆchste Form der Effizienz" β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + +echo "🐼 BashPanda verneigt sich tief. Du bist fast am Ziel." +echo "" + +cat << 'EOF' +Der Gelbe GΓΌrtel lehrt dich MODULARITΓ„T. + +Du wirst lernen: + 🎯 Funktionen - Wiederverwendbarer Code + 🎯 source - Bibliotheken einbinden + 🎯 Funktionsparameter - $1, $2, $@ + 🎯 return vs exit + +"Code, der sich wiederholt, schreit nach Vereinheitlichung." + +EOF + +read -p "➑️ Bereit fΓΌr ModularitΓ€t? (j/n): " start +[[ ! "$start" =~ ^[jJyY]$ ]] && echo "🐼 Bis bald, SchΓΌler." && exit 0 +echo "" + +# === PHASE 1: Funktionen === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 1: Funktionen - Die wiederverwendbare Kata +═══════════════════════════════════════════════════════════ + +Eine Funktion ist wie eine Kampftechnik: Einmal lernen, +tausendmal anwenden. + +EOF + +echo "🐼 Live Demo:" +echo "" + +# Define function +function begruessung() { + echo "🐼 Willkommen, $1!" +} + +echo "Funktion definiert:" +cat << 'CODE' +function begruessung() { + echo "🐼 Willkommen, $1!" +} +CODE +echo "" + +echo "Aufruf: begruessung \"SchΓΌler\"" +begruessung "SchΓΌler" +echo "" + +cat << 'EOF' +πŸ’‘ Funktionen Syntax: + function name() { + befehle + } + + # Oder alternativ: + name() { + befehle + } + + # Aufruf: + name + name parameter1 parameter2 + +EOF + +# === PHASE 2: Parameter === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 2: Funktionsparameter - FlexibilitΓ€t +═══════════════════════════════════════════════════════════ + +EOF + +echo "🐼 Demo mit Parametern:" +echo "" + +function summe() { + local ergebnis=0 + for zahl in "$@" + do + ergebnis=$((ergebnis + zahl)) + done + echo "$ergebnis" +} + +echo "Funktion summe:" +cat << 'CODE' +function summe() { + local ergebnis=0 + for zahl in "$@" + do + ergebnis=$((ergebnis + zahl)) + done + echo "$ergebnis" +} +CODE +echo "" + +echo "Aufruf: summe 10 20 30" +summe 10 20 30 +echo "" + +cat << 'EOF' +πŸ’‘ Parameter: + $1, $2, $3... Einzelne Parameter + $@ Alle Parameter als Liste + $# Anzahl Parameter + local var=x Lokale Variable (nur in Funktion) + +EOF + +# === PHASE 3: source & Bibliotheken === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 3: source - Bibliotheken einbinden +═══════════════════════════════════════════════════════════ + +source lΓ€dt Funktionen aus anderen Dateien. +Wie die WaldwΓ€chter-Bibliothek! 🌲 + +EOF + +echo "🐼 Beispiel: waldwaechter.sh" +echo "" +echo "Diese Mission nutzt:" +echo " source \"\${SCRIPT_DIR}/../../lib/waldwaechter.sh\"" +echo "" +echo "Dadurch sind alle 18 WaldwΓ€chter verfΓΌgbar:" +echo " bashpanda, funkfox, dumbosql, mayaeule, ..." +echo "" + +cat << 'EOF' +πŸ’‘ source Verwendung: + # Bibliothek erstellen: lib.sh + function helper() { + echo "Helper function" + } + + # In anderem Skript einbinden: + source ./lib.sh + helper # Jetzt verfΓΌgbar! + +EOF + +# === PHASE 4: return vs exit === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 4: return vs exit - Der Unterschied +═══════════════════════════════════════════════════════════ + +EOF + +echo "🐼 Wichtiger Unterschied:" +echo "" + +cat << 'EOF' + return X - VerlΓ€sst NUR die Funktion, gibt X zurΓΌck (0 = Erfolg) + exit X - Beendet das GANZE Skript + +EOF + +function test_return() { + echo "In Funktion" + return 42 + echo "Dies wird nicht ausgefΓΌhrt" +} + +echo "Demo:" +test_return +echo "Return Code: $?" +echo "Skript lΓ€uft weiter!" +echo "" + +# === GÜRTELPRÜFUNG === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ₯‹ GÜRTELPRÜFUNG - GELBER GÜRTEL πŸ’› +═══════════════════════════════════════════════════════════ + +Erstelle zwei Dateien: + +1. 'biblio.sh' (Die Bibliothek): + function abbrechen() { + echo "Willst du fortsetzen? (j/n)" + read eingabe + if [ "$eingabe" = "n" ]; then + exit 0 + fi + } + + function summe() { + local total=0 + for zahl in "$@" + do + total=$((total + zahl)) + done + echo "$total" + } + +2. 'rechner.sh' (Das Hauptskript): + #!/bin/bash + source ./biblio.sh + + echo "Berechne: 10 + 20 + 30" + ergebnis=$(summe 10 20 30) + echo "Ergebnis: $ergebnis" + + abbrechen + + echo "Weiter geht's!" + +FΓΌhre aus: ./rechner.sh + +EOF + +read -p "PrΓΌfung bestanden? (j/n): " pruefung + +if [[ "$pruefung" =~ ^[jJyY]$ ]]; then + cat << 'EOF' +╔═══════════════════════════════════════════════════════════╗ +β•‘ πŸŽ‰ HERVORRAGEND! πŸŽ‰ β•‘ +β•‘ Du hast den GELBEN GÜRTEL πŸ’› verdient! β•‘ +β•‘ β•‘ +β•‘ "ModularitΓ€t ist der SchlΓΌssel zur Meisterschaft." β•‘ +β•‘ β•‘ +β•‘ - BashPanda 🐼 β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + echo "πŸ₯‹ Gelernt:" + echo " βœ… Funktionen erstellen und aufrufen" + echo " βœ… Parameter nutzen (\$1, \$@, \$#)" + echo " βœ… source fΓΌr Bibliotheken" + echo " βœ… return vs exit" + echo " βœ… local Variablen" + echo "" + echo "🎯 Letzter GΓΌrtel: WEISS 🀍 (System: Jobs, Background)" +else + echo "🐼 'Funktionen sind wie Meditation - Geduld fΓΌhrt zur Erleuchtung.'" +fi + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "πŸ’¬ bashpanda \"Wie erstelle ich eine Funktion mit Parametern?\"" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" diff --git a/missions/dojo/gruener_guertel.meta.json b/missions/dojo/gruener_guertel.meta.json new file mode 100644 index 0000000..1c2c936 --- /dev/null +++ b/missions/dojo/gruener_guertel.meta.json @@ -0,0 +1,7 @@ +{ + "icon": "πŸ’š", + "title": "GrΓΌner GΓΌrtel - Die Mustererkennung", + "description": "grep, regex, Pattern Matching - Erkenne die Ordnung im Chaos", + "category": "dojo", + "enabled": true +} diff --git a/missions/dojo/gruener_guertel.sh b/missions/dojo/gruener_guertel.sh new file mode 100755 index 0000000..5cff143 --- /dev/null +++ b/missions/dojo/gruener_guertel.sh @@ -0,0 +1,220 @@ +#!/bin/bash + +# 🐼 BashPanda Dojo - GrΓΌner GΓΌrtel πŸ’š +# Lehrt: grep, regex, Pattern Matching +# Schwierigkeit: Fortgeschritten + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${SCRIPT_DIR}/../../lib/waldwaechter.sh" + +cat << 'EOF' + +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ 🐼 BASHPANDA DOJO - GRÜNER GÜRTEL πŸ’š β•‘ +β•‘ β•‘ +β•‘ "Muster erkennen ist der Weg zur Weisheit" β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + +echo "🐼 BashPanda nickt anerkennend. Du bist weit gekommen." +echo "" + +cat << 'EOF' +Der GrΓΌne GΓΌrtel lehrt dich MUSTERERKENNUNG. + +Du wirst lernen: + 🎯 grep - Suchen in Dateien + 🎯 Regular Expressions (Regex) - Die Sprache der Muster + 🎯 grep -E - Extended Regex + 🎯 Praktische Anwendungen: Email, Datum, IP-Adressen + +"Ein Meister sieht nicht nur was da ist, sondern erkennt das Muster." + +EOF + +read -p "➑️ Bereit fΓΌr Mustererkennung? (j/n): " start +[[ ! "$start" =~ ^[jJyY]$ ]] && echo "🐼 Das Muster wartet." && exit 0 +echo "" + +# === PHASE 1: grep Basics === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 1: grep - Die Suche beginnt +═══════════════════════════════════════════════════════════ + +grep durchsucht Text nach Mustern. Wie ein Adler, der Beute +aus der Ferne erkennt. + +EOF + +echo "🐼 Demo: Testdatei erstellen" +cat > /tmp/waldwaechter.txt << 'DEMO' +Maya-Eule ist weise +FunkFox rappt im Beat +DumboSQL vergisst nie +BashPanda lehrt Geduld +Schnippsi stylt alles +DEMO + +echo "" +echo "Inhalt von waldwaechter.txt:" +cat /tmp/waldwaechter.txt +echo "" + +echo "πŸ₯‹ grep 'Fox' /tmp/waldwaechter.txt" +grep 'Fox' /tmp/waldwaechter.txt +echo "" + +echo "πŸ₯‹ grep -i 'bash' /tmp/waldwaechter.txt (case-insensitive)" +grep -i 'bash' /tmp/waldwaechter.txt +echo "" + +cat << 'EOF' +πŸ’‘ grep Optionen: + grep 'muster' datei Suche nach Muster + grep -i 'muster' datei Ignore case + grep -n 'muster' datei Zeige Zeilennummern + grep -v 'muster' datei Invertiere (alles außer Muster) + grep -c 'muster' datei ZΓ€hle Treffer + grep -r 'muster' ordner/ Rekursiv in allen Dateien + +EOF + +# === PHASE 2: Regular Expressions === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 2: Regex - Die Sprache der Muster +═══════════════════════════════════════════════════════════ + +Regex ist wie die Geheimsprache der Textsuche. + +EOF + +echo "🐼 Regex Zeichen:" +echo "" + +cat << 'EOF' + ^ Zeilenanfang + $ Zeilenende + . Ein beliebiges Zeichen + * 0 oder mehr Wiederholungen + + 1 oder mehr Wiederholungen + ? 0 oder 1 Wiederholung + [abc] Eines der Zeichen a, b, c + [0-9] Eine Ziffer + [a-z] Ein Kleinbuchstabe + +EOF + +echo "πŸ₯‹ Beispiele:" +echo "" + +echo "grep '^B' - Zeilen die mit B beginnen:" +grep '^B' /tmp/waldwaechter.txt +echo "" + +echo "grep 't$' - Zeilen die mit t enden:" +grep 't$' /tmp/waldwaechter.txt +echo "" + +# === PHASE 3: Email & Datum Erkennung === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 3: Praktische Muster - Email & Datum +═══════════════════════════════════════════════════════════ + +EOF + +echo "🐼 Email-Muster erkennen:" +echo "" + +cat > /tmp/emails.txt << 'DEMO' +max@beispiel.de +test@web.com +invalid@ +not_an_email +foo.bar@domain.co.uk +DEMO + +echo "Emails in Datei:" +cat /tmp/emails.txt +echo "" + +echo "grep -E fΓΌr Extended Regex:" +echo "Email-Pattern: ^[a-zA-Z]+@[a-zA-Z]+\.[a-zA-Z]+$" +echo "" + +grep -E '^[a-zA-Z.]+@[a-zA-Z]+\.[a-zA-Z.]+$' /tmp/emails.txt +echo "" + +cat << 'EOF' +πŸ’‘ NΓΌtzliche Patterns: + Email: ^[a-zA-Z.]+@[a-zA-Z]+\.[a-zA-Z.]+$ + Datum: ^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$ + IP: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ + +EOF + +# === GÜRTELPRÜFUNG === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ₯‹ GÜRTELPRÜFUNG - GRÜNER GÜRTEL πŸ’š +═══════════════════════════════════════════════════════════ + +Erstelle 'email_finder.sh' das: + +1. Nimmt einen Dateinamen als Parameter: $1 +2. Sucht mit grep -E nach Email-Adressen +3. Nutzt Pattern: ^[[:alpha:]]+(\.[[:alpha:]]+)*@[[:alpha:]]+(\.[[:alpha:]]+)+$ +4. Zeigt alle gefundenen Emails an +5. Bonus: ZΓ€hlt sie mit wc -l + +Test-Datei erstellen: +cat > emails_test.txt << 'END' +maya@crumb.forest +funkfox@beat.music +invalid@ +test@ +dumbo@memory.database +END + +./email_finder.sh emails_test.txt + +EOF + +read -p "PrΓΌfung bestanden? (j/n): " pruefung + +if [[ "$pruefung" =~ ^[jJyY]$ ]]; then + cat << 'EOF' +╔═══════════════════════════════════════════════════════════╗ +β•‘ πŸŽ‰ AUSGEZEICHNET! πŸŽ‰ β•‘ +β•‘ Du hast den GRÜNEN GÜRTEL πŸ’š verdient! β•‘ +β•‘ β•‘ +β•‘ "Wer Muster erkennt, erkennt die Ordnung im Chaos." β•‘ +β•‘ β•‘ +β•‘ - BashPanda 🐼 β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + echo "πŸ₯‹ Gelernt:" + echo " βœ… grep fΓΌr Textsuche" + echo " βœ… Regular Expressions" + echo " βœ… Email/Datum Pattern" + echo " βœ… grep -E Extended Regex" + echo "" + echo "🎯 NΓ€chster GΓΌrtel: GELB πŸ’› (Prozesse & Funktionen)" +else + echo "🐼 'Muster brauchen Zeit zum Erkennen.'" +fi + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "πŸ’¬ bashpanda \"Wie funktioniert grep mit regex?\"" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" diff --git a/missions/dojo/pinker_guertel.meta.json b/missions/dojo/pinker_guertel.meta.json new file mode 100644 index 0000000..783dd44 --- /dev/null +++ b/missions/dojo/pinker_guertel.meta.json @@ -0,0 +1,7 @@ +{ + "icon": "πŸ’–", + "title": "Pinker GΓΌrtel - Die Kontrolle", + "description": "if/then/else, while/for loops, Arrays - Meistere den Fluss des Codes", + "category": "dojo", + "enabled": true +} diff --git a/missions/dojo/pinker_guertel.sh b/missions/dojo/pinker_guertel.sh new file mode 100755 index 0000000..2a54b9c --- /dev/null +++ b/missions/dojo/pinker_guertel.sh @@ -0,0 +1,352 @@ +#!/bin/bash + +# 🐼 BashPanda Dojo - Pinker GΓΌrtel πŸ’– +# Lehrt: if/then/else, while/for loops, Arrays, Arithmetik +# Schwierigkeit: Fortgeschritten + +# Source waldwaechter library for BashPanda +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${SCRIPT_DIR}/../../lib/waldwaechter.sh" + +cat << 'EOF' + +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ 🐼 BASHPANDA DOJO - PINKER GÜRTEL πŸ’– β•‘ +β•‘ β•‘ +β•‘ "Kontrolle kommt von innen, nicht von außen" β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + +echo "🐼 BashPanda verneigt sich tiefer als beim letzten Mal..." +echo "πŸ₯‹ Du bist zurΓΌckgekehrt. Das zeigt Entschlossenheit." +echo "" + +cat << 'EOF' +Der Pinke GΓΌrtel lehrt dich KONTROLLE. + +Du wirst lernen: + 🎯 if/then/else - Entscheidungen treffen + 🎯 while & for - Wiederholung mit Disziplin + 🎯 Arrays - Viele Werte, ein Container + 🎯 Arithmetik - $(( )) und Zahlen + +"Der Fluss des Codes folgt deinen Bedingungen. + Du bist der Meister ΓΌber den Pfad." + +EOF + +read -p "➑️ Bereit fΓΌr fortgeschrittenes Training? (j/n): " start +echo "" + +if [[ ! "$start" =~ ^[jJyY]$ ]]; then + echo "🐼 Die TΓΌr des Dojos steht immer offen." + exit 0 +fi + +# === PHASE 1: if/then/else - Entscheidungen === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 1: if/then/else - Der Pfad des Kriegers +═══════════════════════════════════════════════════════════ + +Im Kampf musst du schnell entscheiden: Angriff oder Verteidigung? +In Bash entscheidest du mit if/then/else. + +EOF + +echo "🐼 BashPanda zeigt dir:" +echo "" + +cat << 'CODE' +alter=25 + +if [ $alter -ge 18 ] +then + echo "Du bist volljΓ€hrig" +else + echo "Du bist minderjΓ€hrig" +fi +CODE + +echo "" +echo "Lass es uns live testen:" +echo "" + +echo "Wie alt bist du?" +read alter + +if [ $alter -ge 18 ] +then + echo "βœ… Du bist volljΓ€hrig - bereit fΓΌr das Dojo!" +else + echo "🌱 Jung wie ein BambussprΓΆssling - lerne mit Geduld." +fi + +echo "" + +cat << 'EOF' +πŸ’‘ Vergleichsoperatoren: + -eq Gleich (equal) + -ne Nicht gleich (not equal) + -gt Grâßer (greater than) + -ge Grâßer oder gleich + -lt Kleiner (less than) + -le Kleiner oder gleich + +FΓΌr Strings: + [ "$a" = "$b" ] Strings sind gleich + [ "$a" != "$b" ] Strings sind verschieden + [ -z "$a" ] String ist leer + [ -n "$a" ] String ist nicht leer + +EOF + +echo "πŸ₯‹ Deine erste Kata:" +echo "" +echo "Erstelle 'datei_check.sh' das:" +echo " - Fragt nach einem Dateinamen" +echo " - PrΓΌft ob die Datei existiert: [ -f \"\$datei\" ]" +echo " - Gibt entsprechende Nachricht aus" +echo "" + +read -p "Bereit fΓΌr Phase 2? (j/n): " phase1 +echo "" + +# === PHASE 2: while Loop - Die Meditation === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 2: while - Die Meditation der Wiederholung +═══════════════════════════════════════════════════════════ + +Wie ein Mantra, das du wiederholst, lΓ€uft eine while-Schleife, +bis die Bedingung nicht mehr wahr ist. + +EOF + +echo "🐼 BashPanda demonstriert:" +echo "" + +cat << 'CODE' +zaehler=1 + +while [ $zaehler -le 5 ] +do + echo "Durchlauf: $zaehler" + zaehler=$((zaehler + 1)) +done +CODE + +echo "" +echo "Live-Demo:" +echo "" + +zaehler=1 +while [ $zaehler -le 5 ] +do + echo "πŸ₯‹ Kata Durchlauf: $zaehler" + sleep 0.5 + zaehler=$((zaehler + 1)) +done + +echo "" + +cat << 'EOF' +πŸ’‘ Wichtiges: + - while [ bedingung ]; do + - zaehler=$((zaehler + 1)) fΓΌr Arithmetik + - done am Ende + - Achtung: Endlosschleifen vermeiden! + +EOF + +# === PHASE 3: for Loop - Der geordnete Kampf === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 3: for - Der geordnete Durchlauf +═══════════════════════════════════════════════════════════ + +Eine for-Schleife ist wie eine Kata-Sequenz: +Du weißt genau welche Bewegungen kommen. + +EOF + +echo "🐼 BashPanda zeigt dir:" +echo "" + +cat << 'CODE' +for name in Maya Tobi FunkFox BashPanda +do + echo "Hallo, $name!" +done +CODE + +echo "" +echo "Live-Demo:" +echo "" + +for name in Maya Tobi FunkFox BashPanda +do + echo "🐼 Begrüßung: Hallo, $name!" +done + +echo "" + +cat << 'EOF' +πŸ’‘ for Varianten: + for i in 1 2 3 4 5 + for datei in *.txt + for zeile in $(cat datei.txt) + for i in {1..10} + +EOF + +echo "πŸ₯‹ Deine zweite Kata:" +echo "" +echo "Erstelle 'fibonacci.sh' das:" +echo " - Fragt nach einer Zahl N" +echo " - Gibt die ersten N Fibonacci-Zahlen aus" +echo " - Nutze while und Arithmetik: a=$((a + b))" +echo "" + +read -p "Bereit fΓΌr Phase 4? (j/n): " phase3 +echo "" + +# === PHASE 4: Arrays - Viele Krieger, eine Armee === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 4: Arrays - Die Armee der Werte +═══════════════════════════════════════════════════════════ + +Ein Array ist wie eine Gruppe von Kriegern: +Jeder hat seine Position, aber sie kΓ€mpfen zusammen. + +EOF + +echo "🐼 BashPanda demonstriert:" +echo "" + +cat << 'CODE' +guertel=("Schwarz" "Pink" "Blau" "Gruen" "Gelb" "Weiss") + +echo "Erster GΓΌrtel: ${guertel[0]}" +echo "Zweiter GΓΌrtel: ${guertel[1]}" +echo "Alle GΓΌrtel: ${guertel[@]}" +echo "Anzahl: ${#guertel[@]}" +CODE + +echo "" +echo "Live-Demo:" +echo "" + +guertel=("Schwarz" "Pink" "Blau" "Gruen" "Gelb" "Weiss") + +echo "πŸ₯‹ Erster GΓΌrtel: ${guertel[0]}" +echo "πŸ₯‹ Zweiter GΓΌrtel: ${guertel[1]}" +echo "πŸ₯‹ Alle GΓΌrtel: ${guertel[@]}" +echo "πŸ₯‹ Anzahl: ${#guertel[@]}" + +echo "" + +cat << 'EOF' +πŸ’‘ Array Operationen: + arr=(1 2 3) Array erstellen + ${arr[0]} Erstes Element + ${arr[@]} Alle Elemente + ${#arr[@]} Anzahl Elemente + arr+=(4) Element hinzufΓΌgen + +Durchlauf: + for element in "${arr[@]}" + do + echo "$element" + done + +EOF + +# === PHASE 5: Die GΓΌrtelprΓΌfung === + +cat << 'EOF' + +═══════════════════════════════════════════════════════════ +πŸ₯‹ GÜRTELPRÜFUNG - PINKER GÜRTEL πŸ’– +═══════════════════════════════════════════════════════════ + +Deine Aufgabe: Erstelle ein Skript 'summenspiel.sh' das: + +1. Ein Array mit 5 Zahlen erstellt: zahlen=(10 20 30 40 50) +2. Durch das Array iteriert (for-Schleife) +3. Die Summe aller Zahlen berechnet +4. Am Ende die Summe ausgibt + +Bonus: +5. Nutze if um zu prΓΌfen ob die Summe > 100 ist +6. Gib entsprechende Nachricht aus + +Beispiel-Ausgabe: + Zahlen: 10 20 30 40 50 + Summe: 150 + βœ… Summe ist grâßer als 100! + +EOF + +echo "πŸ’‘ Hilfe:" +echo " - summe=0 zum Initialisieren" +echo " - summe=\$((summe + zahl)) zum Addieren" +echo " - for zahl in \"\${zahlen[@]}\"" +echo "" + +read -p "Hast du die PrΓΌfung absolviert? (j/n): " pruefung +echo "" + +if [[ "$pruefung" =~ ^[jJyY]$ ]]; then + cat << 'EOF' +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ πŸŽ‰ AUSGEZEICHNET! πŸŽ‰ β•‘ +β•‘ β•‘ +β•‘ Du hast den PINKEN GÜRTEL πŸ’– verdient! β•‘ +β•‘ β•‘ +β•‘ "Kontrolle ΓΌber den Code heißt Kontrolle β•‘ +β•‘ ΓΌber deine Gedanken." β•‘ +β•‘ β•‘ +β•‘ - BashPanda 🐼 β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + + echo "πŸ₯‹ Was du gemeistert hast:" + echo " βœ… if/then/else Entscheidungen" + echo " βœ… while Schleifen mit Bedingungen" + echo " βœ… for Schleifen fΓΌr Iteration" + echo " βœ… Arrays erstellen und nutzen" + echo " βœ… Arithmetik mit \$(( ))" + echo "" + echo "🎯 NΓ€chster GΓΌrtel: BLAU πŸ’™ (Textverarbeitung: sed, case)" + echo "" + + # Small easter egg + echo "πŸŽ‹ BashPanda sagt:" + bashpanda "Was ist die Weisheit hinter Schleifen und Wiederholung im Code?" + +else + cat << 'EOF' +🐼 "Kontrolle braucht Übung, wie ein Baum Zeit zum Wachsen braucht. + Nimm dir die Zeit. Kehre zurΓΌck wenn du bereit bist." + +EOF +fi + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "πŸ’¬ Fragen? Rufe den Meister:" +echo " bashpanda \"Wie funktioniert eine while-Schleife?\"" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" diff --git a/missions/dojo/schwarzer_guertel.meta.json b/missions/dojo/schwarzer_guertel.meta.json new file mode 100644 index 0000000..4b02367 --- /dev/null +++ b/missions/dojo/schwarzer_guertel.meta.json @@ -0,0 +1,7 @@ +{ + "icon": "πŸ–€", + "title": "Schwarzer GΓΌrtel - Die Grundlagen", + "description": "echo, printf, Variablen, read - Der erste Schritt auf dem Weg des Bash-Meisters", + "category": "dojo", + "enabled": true +} diff --git a/missions/dojo/schwarzer_guertel.sh b/missions/dojo/schwarzer_guertel.sh new file mode 100755 index 0000000..36ed384 --- /dev/null +++ b/missions/dojo/schwarzer_guertel.sh @@ -0,0 +1,300 @@ +#!/bin/bash + +# 🐼 BashPanda Dojo - Schwarzer GΓΌrtel πŸ–€ +# Lehrt: echo, printf, Variablen, Benutzereingaben +# Schwierigkeit: AnfΓ€nger + +# Source waldwaechter library for BashPanda +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${SCRIPT_DIR}/../../lib/waldwaechter.sh" + +cat << 'EOF' + +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ 🐼 BASHPANDA DOJO - SCHWARZER GÜRTEL πŸ–€ β•‘ +β•‘ β•‘ +β•‘ "Der Weg des Codes beginnt mit einem einzigen echo" β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + +echo "🐼 BashPanda verneigt sich vor dir..." +echo "πŸ₯‹ Willkommen im Dojo, junger SchΓΌler." +echo "" + +cat << 'EOF' +Der Schwarze GΓΌrtel ist der erste Schritt auf dem Weg des Bash-Meisters. + +Du wirst lernen: + 🎯 echo & printf - Die Stimme des Terminals + 🎯 Variablen - Container fΓΌr Wissen + 🎯 read - Den Dialog mit dem Nutzer + 🎯 ANSI Codes - Farbe ins Terminal bringen + +"Eine Reise von tausend Befehlen beginnt mit einem einzigen Zeichen." + +EOF + +read -p "➑️ Bereit fΓΌr dein erstes Training? (j/n): " start +echo "" + +if [[ ! "$start" =~ ^[jJyY]$ ]]; then + echo "🐼 Der Meister wartet geduldig auf deine RΓΌckkehr." + exit 0 +fi + +# === PHASE 1: echo - Die Stimme des Terminals === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 1: echo - Die Stimme des Terminals +═══════════════════════════════════════════════════════════ + +Wie ein Kampfschrei im Dojo, so ist 'echo' die grundlegendste +Ausgabe im Terminal. + +EOF + +echo "🐼 BashPanda zeigt dir:" +echo "" +echo " echo 'Hallo Welt'" +echo "" +echo "Resultat:" +echo 'Hallo Welt' +echo "" + +cat << 'EOF' +πŸ’‘ WICHTIG: + - Einfache AnfΓΌhrungszeichen ('): Text wird exakt ausgegeben + - Doppelte AnfΓΌhrungszeichen ("): Variablen werden ersetzt + - echo -e: Aktiviert ANSI Escape-Sequenzen + +EOF + +echo "πŸ₯‹ Deine erste Kata (Übung):" +echo "" +echo "1. Γ–ffne ein neues Terminal" +echo "2. Tippe: echo 'Ich bin ein Bash-SchΓΌler'" +echo "3. DrΓΌcke Enter" +echo "" + +read -p "Hast du es probiert? (j/n): " phase1 +echo "" + +if [[ "$phase1" =~ ^[jJyY]$ ]]; then + echo "βœ… Gut! Die erste Technik sitzt." +else + echo "🐼 'Ohne Übung kein Fortschritt. Probiere es spΓ€ter aus.'" +fi + +# === PHASE 2: printf & ANSI Codes === + +cat << 'EOF' + +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 2: printf & ANSI Codes - Die Kunst der Formatierung +═══════════════════════════════════════════════════════════ + +printf ist wie echo, aber mit mehr Kontrolle. +ANSI Codes sind wie Chi - sie geben dem Text Kraft und Farbe. + +EOF + +echo "🐼 BashPanda demonstriert:" +echo "" +echo " echo -e '\\e[1mFett\\e[22m und \\e[4munterstrichen\\e[24m'" +echo "" +echo "Resultat:" +echo -e '\e[1mFett\e[22m und \e[4munterstrichen\e[24m' +echo "" + +cat << 'EOF' +πŸ“– Wichtige ANSI Codes: + \e[1m - Fett + \e[22m - Fett zurΓΌcksetzen + \e[4m - Unterstrichen + \e[24m - Unterstrichen zurΓΌcksetzen + \e[32m - GrΓΌne Farbe + \e[0m - Alle Formatierungen zurΓΌcksetzen + +EOF + +echo "πŸ₯‹ Deine zweite Kata:" +echo "" +echo "Erstelle eine Datei 'farbtest.sh' mit:" +echo "" +cat << 'CODE' +#!/bin/bash +echo -e "\e[32mGrΓΌn wie Bambus\e[0m" +echo -e "\e[1m\e[33mGelb und fett wie die Sonne\e[0m" +echo -e "\e[4mUnterstrichen wie ein Pfad\e[0m" +CODE +echo "" +echo "Dann: chmod +x farbtest.sh && ./farbtest.sh" +echo "" + +read -p "MΓΆchtest du fortfahren? (j/n): " phase2 +echo "" + +# === PHASE 3: Variablen - Container fΓΌr Wissen === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 3: Variablen - Container fΓΌr Wissen +═══════════════════════════════════════════════════════════ + +Eine Variable ist wie ein Bambus - biegsam, kann viel tragen, +und wΓ€chst mit der Zeit. + +EOF + +echo "🐼 BashPanda zeigt dir:" +echo "" + +cat << 'CODE' +name="Kung Fu Meister" +echo "Hallo, $name" +echo "Mein Name ist: ${name}" +CODE + +echo "" +echo "Resultat:" +name="Kung Fu Meister" +echo "Hallo, $name" +echo "Mein Name ist: ${name}" +echo "" + +cat << 'EOF' +πŸ’‘ Regeln fΓΌr Variablen: + - Keine Leerzeichen um das '=' Zeichen! + - Variablennamen: Buchstaben, Zahlen, Unterstriche + - Zugriff mit $variable oder ${variable} + +EOF + +echo "πŸ₯‹ Deine dritte Kata:" +echo "" +echo "Erstelle 'variablen_test.sh':" +echo "" +cat << 'CODE' +#!/bin/bash +guertel="Schwarz" +meister="BashPanda" +echo "Ich trainiere fΓΌr den ${guertel}en GΓΌrtel." +echo "Mein Meister ist $meister." +CODE +echo "" + +read -p "Bereit fΓΌr die letzte Phase? (j/n): " phase3 +echo "" + +# === PHASE 4: read - Der Dialog mit dem Nutzer === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 4: read - Der Dialog mit dem Nutzer +═══════════════════════════════════════════════════════════ + +Ein Meister hΓΆrt zu. Mit 'read' gibst du dem Nutzer eine Stimme. + +EOF + +echo "🐼 BashPanda zeigt dir:" +echo "" + +cat << 'CODE' +echo "Wie heißt du?" +read name +echo "Willkommen, $name!" +CODE + +echo "" +echo "Lass es uns live testen:" +echo "" +echo "Wie heißt du?" +read name +echo "Willkommen im Dojo, $name! 🐼" +echo "" + +cat << 'EOF' +πŸ’‘ read Optionen: + read name - Speichert Eingabe in $name + read -p "Frage: " - Zeigt Prompt vor Eingabe + read -s password - Silent mode (fΓΌr PasswΓΆrter) + +EOF + +# === PHASE 5: Die GΓΌrtelprΓΌfung === + +cat << 'EOF' + +═══════════════════════════════════════════════════════════ +πŸ₯‹ GÜRTELPRÜFUNG - SCHWARZER GÜRTEL πŸ–€ +═══════════════════════════════════════════════════════════ + +Deine Aufgabe: Erstelle ein Skript 'begruessung.sh' das: + +1. Den Nutzer nach seinem Namen fragt +2. Nach seinem Lieblings-Essen fragt +3. Eine farbige Begrüßung ausgibt mit: + - Namen in GRÜN + - Essen in GELB + - "Willkommen im Dojo" in FETT + +Beispiel-Ausgabe: + Willkommen im Dojo! + Name: Max (in grΓΌn) + Lieblingsessen: Nudeln (in gelb) + +EOF + +echo "πŸ’‘ Hilfestellung: Nutze echo -e, read -p, Variablen und ANSI Codes" +echo "" +echo "Wenn du fertig bist, fΓΌhre dein Skript aus und zeige es BashPanda!" +echo "" + +read -p "Hast du die PrΓΌfung absolviert? (j/n): " pruefung +echo "" + +if [[ "$pruefung" =~ ^[jJyY]$ ]]; then + cat << 'EOF' +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ πŸŽ‰ GLÜCKWUNSCH! πŸŽ‰ β•‘ +β•‘ β•‘ +β•‘ Du hast den SCHWARZEN GÜRTEL πŸ–€ verdient! β•‘ +β•‘ β•‘ +β•‘ "Der erste Schritt ist getan. β•‘ +β•‘ Tausend weitere liegen vor dir." β•‘ +β•‘ β•‘ +β•‘ - BashPanda 🐼 β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + + echo "πŸ₯‹ Was du gelernt hast:" + echo " βœ… echo & printf fΓΌr Ausgaben" + echo " βœ… ANSI Codes fΓΌr Formatierung" + echo " βœ… Variablen erstellen und nutzen" + echo " βœ… read fΓΌr Benutzereingaben" + echo "" + echo "🎯 NΓ€chster GΓΌrtel: PINK πŸ’– (Kontrolle: if/then, Arrays)" + echo "" +else + cat << 'EOF' +🐼 "Es ist keine Schande, mehr Zeit zu brauchen. + Auch der grâßte Meister war einst ein AnfΓ€nger. + Übe weiter, und komm zurΓΌck wenn du bereit bist." + +EOF +fi + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "πŸ’¬ Fragen? Rufe den Meister:" +echo " bashpanda \"Wie funktioniert echo?\"" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" diff --git a/missions/dojo/weisser_guertel.meta.json b/missions/dojo/weisser_guertel.meta.json new file mode 100644 index 0000000..2469117 --- /dev/null +++ b/missions/dojo/weisser_guertel.meta.json @@ -0,0 +1,7 @@ +{ + "icon": "🀍", + "title": "Weisser GΓΌrtel - Die Meisterschaft", + "description": "Background Jobs, Prozesse, parallel processing - Der Weg des Meisters", + "category": "dojo", + "enabled": true +} diff --git a/missions/dojo/weisser_guertel.sh b/missions/dojo/weisser_guertel.sh new file mode 100755 index 0000000..89ca710 --- /dev/null +++ b/missions/dojo/weisser_guertel.sh @@ -0,0 +1,313 @@ +#!/bin/bash + +# 🐼 BashPanda Dojo - Weisser GΓΌrtel 🀍 +# Lehrt: Background Jobs, Processes, ps, jobs, & +# Schwierigkeit: Meister + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${SCRIPT_DIR}/../../lib/waldwaechter.sh" + +cat << 'EOF' + +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ 🐼 BASHPANDA DOJO - WEISSER GÜRTEL 🀍 β•‘ +β•‘ β•‘ +β•‘ "Der Meister kontrolliert nicht nur Code, β•‘ +β•‘ sondern auch Prozesse" β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + +echo "🐼 BashPanda steht auf. Er verneigt sich als EbenbΓΌrtiger." +echo "πŸ₯‹ Du bist bereit fΓΌr die letzte Lehre." +echo "" + +cat << 'EOF' +Der Weisse GΓΌrtel lehrt dich PROZESS-KONTROLLE. + +Du wirst lernen: + 🎯 & - Jobs im Hintergrund starten + 🎯 jobs - Aktive Jobs anzeigen + 🎯 ps - Prozesse anzeigen + 🎯 kill - Prozesse beenden + 🎯 wait - Auf Prozesse warten + +"Ein Meister lΓ€sst Prozesse fΓΌr sich arbeiten, + wΓ€hrend er meditiert." + +EOF + +read -p "➑️ Bereit fΓΌr die MeisterprΓΌfung? (j/n): " start +[[ ! "$start" =~ ^[jJyY]$ ]] && echo "🐼 Der Weg endet nie." && exit 0 +echo "" + +# === PHASE 1: Background Jobs mit & === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 1: & - Hintergrund-Prozesse +═══════════════════════════════════════════════════════════ + +Mit & startest du einen Prozess im Hintergrund. +Das Terminal bleibt frei fΓΌr weitere Befehle. + +EOF + +echo "🐼 Live Demo:" +echo "" + +echo "Starte: sleep 5 &" +sleep 5 & +JOB_PID=$! +echo "Job gestartet mit PID: $JOB_PID" +echo "" + +echo "Terminal ist frei! Ich kann weiter arbeiten." +echo "Der Job lΓ€uft im Hintergrund..." +echo "" + +cat << 'EOF' +πŸ’‘ Background Syntax: + command & Starte im Hintergrund + $! PID des letzten Background-Jobs + jobs Zeige alle aktiven Jobs + fg %1 Bring Job 1 in Vordergrund + bg %1 Sende Job 1 in Hintergrund + +EOF + +# === PHASE 2: jobs & ps === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 2: jobs & ps - Übersicht behalten +═══════════════════════════════════════════════════════════ + +EOF + +echo "🐼 Demo: Mehrere Jobs starten" +echo "" + +sleep 3 & +sleep 4 & +sleep 5 & + +echo "jobs zeigt alle Jobs dieser Shell:" +jobs +echo "" + +echo "ps zeigt alle deine Prozesse:" +ps aux | grep $USER | head -5 +echo "" + +cat << 'EOF' +πŸ’‘ Prozess-Befehle: + jobs Jobs der aktuellen Shell + ps aux Alle Prozesse (detailliert) + ps aux | grep X Suche Prozess X + pgrep name Finde PID von Prozess + pkill name Beende Prozess nach Namen + +EOF + +# === PHASE 3: wait - Auf Prozesse warten === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 3: wait - Synchronisation +═══════════════════════════════════════════════════════════ + +wait wartet bis ein Background-Job fertig ist. + +EOF + +echo "🐼 Live Demo:" +echo "" + +cat << 'CODE' +echo "Starte Job..." +sleep 2 & +PID=$! +echo "Warte auf Job $PID..." +wait $PID +echo "Job ist fertig!" +CODE + +echo "" +echo "AusfΓΌhrung:" +echo "Starte Job..." +sleep 2 & +PID=$! +echo "Warte auf Job $PID..." +wait $PID +echo "βœ… Job ist fertig!" +echo "" + +cat << 'EOF' +πŸ’‘ wait Verwendung: + wait Warte auf ALLE Background-Jobs + wait $PID Warte auf spezifischen Job + wait %1 Warte auf Job-Nummer 1 + +EOF + +# === PHASE 4: Praktisches Beispiel === + +cat << 'EOF' +═══════════════════════════════════════════════════════════ +πŸ“š PHASE 4: Parallel Processing - Die Macht +═══════════════════════════════════════════════════════════ + +Mehrere Tasks parallel ausfΓΌhren, dann auf alle warten. + +EOF + +echo "🐼 Demo: 3 Tasks parallel" +echo "" + +cat << 'CODE' +function task() { + echo "Task $1 startet..." + sleep 2 + echo "Task $1 fertig!" +} + +task 1 & +task 2 & +task 3 & + +wait +echo "Alle Tasks abgeschlossen!" +CODE + +echo "" +echo "AusfΓΌhrung:" + +function task() { + echo "πŸ₯‹ Task $1 startet..." + sleep 1 + echo "βœ… Task $1 fertig!" +} + +task 1 & +task 2 & +task 3 & + +wait +echo "🐼 Alle Tasks abgeschlossen!" +echo "" + +# === DIE MEISTERPRÜFUNG === + +cat << 'EOF' + +═══════════════════════════════════════════════════════════ +πŸ₯‹ MEISTERPRÜFUNG - WEISSER GÜRTEL 🀍 +═══════════════════════════════════════════════════════════ + +Deine finale Aufgabe: Erstelle 'parallel_processor.sh' + +Das Skript soll: + +1. Eine Funktion 'process_file' definieren: + - Nimmt Dateiname als Parameter + - ZΓ€hlt WΓΆrter mit wc -w + - Schreibt Ergebnis in \${datei}.count + +2. 5 Test-Dateien erstellen: + echo "Test Inhalt" > file1.txt + (fΓΌr file1 bis file5) + +3. Alle 5 parallel verarbeiten: + for file in file*.txt + do + process_file "$file" & + done + +4. Mit wait auf alle warten + +5. Ergebnisse ausgeben: + cat file*.count + +Bonuspunkte: +- Nutze jobs um zu zeigen wie viele laufen +- Speichere PIDs in Array +- PrΓΌfe mit $? ob Jobs erfolgreich waren + +EOF + +echo "πŸ’‘ Dies kombiniert ALLES was du gelernt hast:" +echo " - Funktionen (Gelb)" +echo " - Arrays & Schleifen (Pink)" +echo " - Background Jobs & wait (Weiss)" +echo "" + +read -p "Hast du die MeisterprΓΌfung bestanden? (j/n): " pruefung + +if [[ "$pruefung" =~ ^[jJyY]$ ]]; then + cat << 'EOF' + +╔═══════════════════════════════════════════════════════════╗ +β•‘ β•‘ +β•‘ πŸ† MEISTERSCHAFT ERREICHT! πŸ† β•‘ +β•‘ β•‘ +β•‘ Du hast den WEISSEN GÜRTEL 🀍 verdient! β•‘ +β•‘ β•‘ +β•‘ DU BIST NUN EIN BASH-MEISTER! β•‘ +β•‘ β•‘ +β•‘ "Der Weg des Meisters endet nie. β•‘ +β•‘ Mit jedem Tag lernst du etwas Neues. β•‘ +β•‘ Lehre nun andere, was du gelernt hast." β•‘ +β•‘ β•‘ +β•‘ - BashPanda 🐼 β•‘ +β•‘ β•‘ +β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +EOF + + echo "" + echo "πŸ₯‹ DEINE REISE DURCH DAS DOJO:" + echo "" + echo " πŸ–€ Schwarzer GΓΌrtel: echo, Variablen, read" + echo " πŸ’– Pinker GΓΌrtel: if/then, Schleifen, Arrays" + echo " πŸ’™ Blauer GΓΌrtel: sed, case, bc" + echo " πŸ’š GrΓΌner GΓΌrtel: grep, regex, Pattern" + echo " πŸ’› Gelber GΓΌrtel: Funktionen, source" + echo " 🀍 Weisser GΓΌrtel: Background Jobs, Prozesse" + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + echo "🌲 WILLKOMMEN IN DER CRUMBCREW! 🌲" + echo "" + echo " Du kannst nun:" + echo " - Alle 18 WaldwΓ€chter befehligen" + echo " - Eigene Bash-Skripte meistern" + echo " - Komplexe Missions im Crumbforest lΓΆsen" + echo "" + echo "🎯 NΓ€chste Schritte:" + echo " - Erkunde missions/robots/ (Hardware-Projekte)" + echo " - Nutze ./crumb-mission-selector.sh (Option 9: CrumbCrew)" + echo " - Erstelle eigene Skripte und teile sie!" + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + echo "🐼 BashPanda sagt zum Abschied:" + echo "" + + bashpanda "Was ist die Weisheit eines Bash-Meisters?" + +else + cat << 'EOF' +🐼 "Der weisse GΓΌrtel ist der Anfang, nicht das Ende. + Übe weiter. Der Weg des Meisters ist niemals vollendet." + +EOF +fi + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "πŸ’¬ bashpanda \"Was sind Background-Prozesse?\"" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo ""