cleanup structure

This commit is contained in:
nik committed 2025-08-29 01:06:03 +01:00
1 parent 10d6659300
commit 46ccd50479
17 files changed
+125 -286

No files matched your search

+19 -16
View File
@@ -86,30 +86,30 @@ function backup_file(filename)
end end
``` ```
## Live Demos ## 🎯 Examples
Run these demos to see luash in action: Explore organized examples that demonstrate Luash features:
```bash ```bash
# Basic features demo # Start with the showcase for a complete overview
./luash demo_basic.luash ./luash examples/09_showcase.luash
# Quick comparison with bash # Learn step-by-step with numbered examples
./luash demo_quick_examples.luash ./luash examples/01_basic_features.luash
./luash examples/02_quick_comparison.luash
./luash examples/03_interpolation.luash
# System administration tasks # Try practical use cases
./luash demo_system_admin.luash ./luash examples/04_system_admin.luash
./luash examples/05_development.luash
./luash examples/06_data_processing.luash
# Development workflow automation # Or use the interactive runner
./luash demo_development.luash ./luash run_examples.luash
# Data processing and analysis
./luash demo_data_processing.luash
# Interactive demo runner
./luash run_demos.luash
``` ```
See [examples/README.md](examples/README.md) for the complete learning path.
### What You Get ### What You Get
#### File System Operations #### File System Operations
@@ -266,9 +266,12 @@ The interactive shell supports:
- All luash preprocessing features - All luash preprocessing features
- Multiline input for functions, loops, etc. - Multiline input for functions, loops, etc.
- Command history with `.history` - Command history with `.history`
- Screen clearing with `.clear`
- Special commands: `.help`, `.exit`, `.clear` - Special commands: `.help`, `.exit`, `.clear`
- Real-time expression evaluation - Real-time expression evaluation
See [examples/08_repl_guide.luash](examples/08_repl_guide.luash) for a comprehensive guide.
### Debug Mode ### Debug Mode
```bash ```bash
LUASH_DEBUG=1 ./luash script.luash LUASH_DEBUG=1 ./luash script.luash
-75
View File
@@ -1,75 +0,0 @@
#!/usr/bin/env luash
-- Quick Examples: Bite-sized demos showing luash vs bash
print("=== Luash vs Bash: Quick Examples ===\n")
print("1. Environment Variables")
print(" Bash: echo $USER")
print(" Luash: print($USER)")
print(" → " .. $USER)
print("\n2. Variable Assignment")
print(" Bash: MY_VAR=\"hello\"")
print(" Luash: $MY_VAR = \"hello\"")
$MY_VAR = "hello"
print(" → " .. $MY_VAR)
print("\n3. Command Substitution")
print(" Bash: current_dir=$(pwd)")
print(" Luash: current_dir = `pwd`")
current_dir = `pwd`
print(" → " .. current_dir)
print("\n4. Conditional Logic")
print(" Bash: if [ -f \"README.md\" ]; then echo \"exists\"; fi")
print(" Luash: if `test -f README.md` == \"\" then print(\"missing\") else print(\"exists\") end")
if `test -f README.md && echo "yes"` == "yes" then
print(" → exists")
else
print(" → missing")
end
print("\n5. Loops with Arrays")
print(" Bash: for file in *.lua; do echo $file; done")
print(" Luash: files = `ls *.lua`; for file in files:gmatch(\"[^\\n]+\") do print(file) end")
files = `ls *.luash`
print(" → Files found:")
for file in files:gmatch("[^\n]+") do
print(" " .. file)
end
print("\n6. String Processing")
print(" Bash: echo \"hello world\" | tr '[:lower:]' '[:upper:]'")
print(" Luash: string.upper(\"hello world\")")
print(" → " .. string.upper("hello world"))
print("\n7. Math Operations")
print(" Bash: result=$((5 + 3))")
print(" Luash: result = 5 + 3")
result = 5 + 3
print(" → " .. result)
print("\n8. File Operations")
print(" Bash: cat file.txt | wc -l")
print(" Luash: line_count = `cat luash | wc -l`")
line_count = `cat luash | wc -l`
print(" → " .. line_count .. " lines in luash script")
print("\n9. Error Handling")
print(" Bash: command || echo \"failed\"")
print(" Luash: if `command 2>/dev/null` == \"\" then print(\"failed\") end")
if `nonexistent_command 2>/dev/null` == "" then
print(" → command failed (as expected)")
end
print("\n10. Complex Data Structures")
print(" Bash: (limited array support)")
print(" Luash: Full Lua tables!")
data = {
users = {"alice", "bob", "charlie"},
scores = {alice = 95, bob = 87, charlie = 92}
}
print(" → Users: " .. table.concat(data.users, ", "))
print(" → Alice's score: " .. data.scores.alice)
print("\n✨ Luash combines the best of shell scripting with Lua's power!")
-47
View File
@@ -1,47 +0,0 @@
#!/usr/bin/env luash
-- Demo Runner: Showcase all luash capabilities
print("🚀 Welcome to Luash Demos!")
print("=" .. string.rep("=", 50))
demos = {
{name = "Basic Features", file = "demo_basic.luash", description = "Environment variables, shell commands, and string handling"},
{name = "Quick Examples", file = "demo_quick_examples.luash", description = "Side-by-side comparison with bash"},
{name = "System Administration", file = "demo_system_admin.luash", description = "Real-world sysadmin tasks"},
{name = "Development Workflow", file = "demo_development.luash", description = "Git, building, and deployment automation"},
{name = "Data Processing", file = "demo_data_processing.luash", description = "File processing and text analysis"}
}
print("\nAvailable demos:")
for i = 1, #demos do
print(" " .. i .. ". " .. demos[i].name)
print(" " .. demos[i].description)
end
print("\nEnter demo number (1-" .. #demos .. "), 'all' to run all demos, or 'q' to quit:")
-- In a real interactive version, we'd read input
-- For now, let's run a specific demo or all
demo_choice = "1" -- Change this to test different demos
if demo_choice == "all" then
for i = 1, #demos do
print("\n" .. string.rep("=", 60))
print("Running Demo " .. i .. ": " .. demos[i].name)
print(string.rep("=", 60))
!./luash $demos[i].file
print("\nPress Enter to continue...")
!read
end
elseif tonumber(demo_choice) and tonumber(demo_choice) >= 1 and tonumber(demo_choice) <= #demos then
local choice = tonumber(demo_choice)
print("\n" .. string.rep("=", 60))
print("Running Demo: " .. demos[choice].name)
print(string.rep("=", 60))
!./luash demos[choice].file
else
print("Running basic demo...")
!./luash demo_basic.luash
end
print("\n✨ Thanks for trying Luash!")
-20
View File
@@ -1,20 +0,0 @@
-- Test environment variables
print("Current shell: " .. $SHELL)
-- Test environment variable assignment
$HELLO = "my variable"
print("HELLO = " .. $HELLO)
-- Test $VAR inside strings (should NOT be substituted)
print("This should print literally: $SHELL and $HOME")
-- Test $VAR outside strings (should be substituted)
print("Home directory: " .. $HOME)
-- Test shell commands
current_dir = `pwd`
print("Current directory: " .. current_dir)
-- Test interactive command
!echo "Running interactive command"
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+36
View File
@@ -0,0 +1,36 @@
# Luash Examples
This directory contains examples demonstrating Luash features, organized in a logical learning order:
## 📚 Learning Path
1. **[01_basic_features.luash](01_basic_features.luash)** - Core Luash features (env vars, commands, strings)
2. **[02_quick_comparison.luash](02_quick_comparison.luash)** - Side-by-side comparison with Bash
3. **[03_interpolation.luash](03_interpolation.luash)** - Variable interpolation in shell commands
4. **[04_system_admin.luash](04_system_admin.luash)** - System administration tasks
5. **[05_development.luash](05_development.luash)** - Development workflows
6. **[06_data_processing.luash](06_data_processing.luash)** - Data analysis and processing
7. **[07_interactive_demo.luash](07_interactive_demo.luash)** - Building interactive applications
8. **[08_repl_guide.luash](08_repl_guide.luash)** - Interactive shell usage guide
9. **[09_showcase.luash](09_showcase.luash)** - Complete feature showcase
## 🚀 Quick Start
```bash
# Run individual examples
../luash 01_basic_features.luash
# Run the showcase (best overview)
../luash 09_showcase.luash
# Try the interactive shell
../luash -i
```
## 📝 Example Categories
- **Basics**: Examples 1-3 cover fundamental syntax and features
- **Use Cases**: Examples 4-6 show practical applications
- **Advanced**: Examples 7-9 cover interactive features and comprehensive demos
Each example is self-contained and includes explanatory comments.
+70
View File
@@ -0,0 +1,70 @@
-- Example Runner - Run all Luash examples in order
-- Usage: ./luash run_examples.luash
print("🚀 Luash Examples Runner")
print("=" .. string.rep("=", 25))
-- Get list of examples
examples = `ls examples/*.luash | sort`
if examples == "" then
print("❌ No examples found in examples/ directory")
os.exit(1)
end
local example_files = {}
for file in examples:gmatch("[^\n]+") do
table.insert(example_files, file)
end
print("\nFound " .. #example_files .. " examples:")
for i, file in ipairs(example_files) do
local name = file:match("examples/(.+)%.luash")
print(string.format(" %d. %s", i, name))
end
print("\n" .. string.rep("-", 50))
print("Choose an option:")
print(" 1-" .. #example_files .. ": Run specific example")
print(" a: Run all examples")
print(" q: Quit")
print(string.rep("-", 50))
io.write("Your choice: ")
io.flush()
choice = io.read()
if choice == "q" then
print("Goodbye!")
os.exit(0)
elseif choice == "a" then
print("\n🎬 Running all examples...\n")
for i, file in ipairs(example_files) do
local name = file:match("examples/(.+)%.luash")
print(string.format("\n[%d/%d] Running %s", i, #example_files, name))
print(string.rep("=", 60))
local result = os.execute("./luash " .. file)
if result ~= 0 then
print("❌ Example failed!")
end
if i < #example_files then
print("\nPress Enter to continue...")
io.read()
end
end
print("\n✅ All examples completed!")
else
local num = tonumber(choice)
if num and num >= 1 and num <= #example_files then
local file = example_files[num]
local name = file:match("examples/(.+)%.luash")
print("\n🎬 Running " .. name .. "...")
print(string.rep("=", 60))
os.execute("./luash " .. file)
else
print("❌ Invalid choice: " .. choice)
os.exit(1)
end
end
-124
View File
@@ -1,124 +0,0 @@
#!/usr/bin/env luash
-- Luash Showcase: Highlight the best features
print("🚀 Luash - Minimal Lua Shell Scripting")
print("=" .. string.rep("=", 45))
print("\n💡 Why Luash?")
print("✓ Clean syntax - no more bash quoting nightmares")
print("✓ Real programming language features")
print("✓ Seamless shell integration")
print("✓ Minimal and focused")
print("\n📊 Quick Comparison:")
print("┌─────────────────┬─────────────────────┬─────────────────────┐")
print("│ Task │ Bash │ Luash │")
print("├─────────────────┼─────────────────────┼─────────────────────┤")
print("│ Variables │ VAR=\"value\" │ $VAR = \"value\" │")
print("│ Command Sub │ result=$(cmd) │ result = `cmd` │")
print("│ Conditionals │ if [ -f file ]; fi │ if `test -f file` │")
print("│ Arrays │ arr=(a b c) │ arr = {\"a\",\"b\",\"c\"} │")
print("│ Functions │ Limited │ Full Lua functions │")
print("└─────────────────┴─────────────────────┴─────────────────────┘")
print("\n🎯 Live Examples:")
print("\n1. Environment & Variables")
print(" Current user: " .. $USER)
$GREETING = "Hello from Luash"
print(" Custom var: " .. $GREETING)
print("\n2. Shell Integration")
system_info = `uname -a`
print(" System: " .. system_info)
file_count = `ls | wc -l`
print(" Files here: " .. file_count)
print("\n3. Real Programming")
-- Lua's power: functions, tables, proper data types
function analyze_directory(path)
local files = `ls -la ` .. (path or ".")
local lines = {}
local file_count = 0
local total_size = 0
for line in files:gmatch("[^\n]+") do
if not line:match("^total") and not line:match("^d") then
file_count = file_count + 1
-- Extract size (5th field in ls -la)
local size = line:match("%S+%s+%S+%s+%S+%s+%S+%s+(%d+)")
if size then
total_size = total_size + tonumber(size)
end
end
end
return file_count, total_size
end
files, size = analyze_directory()
print(" Analysis: " .. files .. " files, " .. size .. " bytes total")
print("\n4. Error Handling")
if `which git 2>/dev/null` ~= "" then
print(" ✓ Git is available")
if `git status 2>/dev/null` ~= "" then
branch = `git branch --show-current 2>/dev/null`
print(" Current branch: " .. branch)
else
print(" Not in a git repository")
end
else
print(" ✗ Git not installed")
end
print("\n5. Data Processing")
-- Create and process some data
sample_data = {
{name = "Alice", score = 95},
{name = "Bob", score = 87},
{name = "Charlie", score = 92}
}
total_score = 0
for i = 1, #sample_data do
total_score = total_score + sample_data[i].score
end
average = total_score / #sample_data
print(" Student scores processed:")
print(" Average: " .. string.format("%.1f", average))
-- Find highest scorer
best_student = sample_data[1]
for i = 2, #sample_data do
if sample_data[i].score > best_student.score then
best_student = sample_data[i]
end
end
print(" Top student: " .. best_student.name .. " (" .. best_student.score .. ")")
print("\n🎪 Interactive Demo:")
print(" Let's see what's running on your system...")
!ps aux | head -5
print("\n📈 Performance:")
start_time = `date +%s.%N`
-- Simulate some work
for i = 1, 1000 do
local _ = string.upper("performance test " .. i)
end
end_time = `date +%s.%N`
-- Calculate duration (requires bash-style arithmetic)
duration = tonumber(end_time) - tonumber(start_time)
print(" Processed 1000 operations in " .. string.format("%.3f", duration) .. " seconds")
print("\n✨ Try these demos:")
print(" ./luash demo_quick_examples.luash # Side-by-side with bash")
print(" ./luash demo_system_admin.luash # Sysadmin tasks")
print(" ./luash demo_development.luash # Dev workflows")
print(" ./luash demo_data_processing.luash # Data analysis")
print("\n🎉 Luash: Shell scripting that doesn't make you cry!")
-4
View File
@@ -1,4 +0,0 @@
System Report - Fri Aug 29 00:17:34 BST 2025
User: nik
System: Darwin arm64
Processes: 750