如何使用二维码实现网页跳转?
2026/1/16 15:57:47
$符号。# 定义变量 name="Linux" # 使用变量 echo "Hello, $name"上述脚本输出结果为:Hello, Linux。if语句可以根据条件执行不同分支。测试条件通常结合test命令或[ ]结构。if [ "$name" = "Linux" ]; then echo "Welcome to Linux system." else echo "Unknown system." fi| 变量 | 含义 |
|---|---|
| $0 | 脚本名称 |
| $1-$9 | 第1到第9个命令行参数 |
| $# | 参数个数 |
| $$ | 当前进程PID |
chmod +x script.sh && ./script.shsh script.sh或bash script.shsource script.shvar关键字或短声明操作符:=定义变量。推荐在包级作用域使用完整声明,提升可读性:var ( ServerPort = 8080 DebugMode = false )该方式集中声明配置参数,便于统一维护。短声明仅适用于函数内部。os.Getenv读取环境变量,并结合条件逻辑设置默认值:port := os.Getenv("SERVER_PORT") if port == "" { port = "8080" }此模式确保服务在未配置环境变量时仍能启动,增强鲁棒性。godotenv等库加载.env文件辅助本地开发if-else和switch语句,程序可根据不同条件执行分支逻辑。if score >= 90 { fmt.Println("等级: A") } else if score >= 80 { fmt.Println("等级: B") } else { fmt.Println("等级: C") }该代码根据分数范围输出对应等级,score为输入变量,条件自上而下逐个判断,匹配后即执行对应分支。for循环适用于已知迭代次数的场景while风格逻辑可通过for condition实现for i := 1; i <= 5; i++ { fmt.Printf("第 %d 次循环\n", i) }此循环输出 1 到 5 的计数,i为循环变量,初始值为 1,每次递增 1,直到不满足i <= 5时终止。# 将ls结果写入文件,覆盖原内容 ls > output.txt # 追加模式输出 echo "log entry" >> log.txt # 丢弃错误信息 grep "pattern" *.txt 2> /dev/null上述代码中,>表示覆盖写入,>>用于追加,2>指定标准错误的重定向路径,/dev/null是系统的“黑洞”设备,用于丢弃不需要的输出。package main import ( "flag" "fmt" ) func main() { port := flag.Int("port", 8080, "指定服务端口") debug := flag.Bool("debug", false, "启用调试模式") flag.Parse() fmt.Printf("端口: %d, 调试: %v\n", *port, *debug) }上述代码定义了两个命名参数:`-port` 和 `-debug`。`flag.Parse()` 负责解析传入参数,未指定时使用默认值。指针返回类型需解引用获取值。if [ $? -eq 0 ]; then echo "上一步成功,继续执行" else echo "检测到错误,终止流程" >&2 exit 1 fi该代码段通过检查前一条命令的退出状态($?)决定后续行为,确保错误不会被忽略。wait控制后台任务同步function formatPrice(amount, currency = 'CNY') { // 参数说明: // amount: 数值金额 // currency: 货币类型,默认为人民币 return new Intl.NumberFormat('zh-CN', { style: 'currency', currency: currency }).format(amount); }该函数封装了金额格式化逻辑,接收数值和可选货币类型,返回本地化格式的金额字符串。通过复用此函数,多处价格展示逻辑得以统一,避免重复实现。set -x:启用命令追踪,显示每条命令执行前的展开形式set -e:遇到任何非零退出状态立即终止脚本set -u:访问未定义变量时抛出错误set -o pipefail:确保管道中任意环节失败即整体失败#!/bin/bash set -x set -e set -u name="world" echo "Hello, $name"上述代码启用`set -x`后,终端会输出类似:+ name=world和+ echo 'Hello, world'的执行轨迹,便于定位逻辑异常。结合`-e`与`-u`,可防止因变量误用或命令失败导致的隐蔽错误。log.Printf("{\"level\":\"error\",\"timestamp\":\"%s\",\"message\":\"%s\",\"trace_id\":\"%s\"}", time.Now().Format(time.RFC3339), "database connection failed", traceID)该代码将错误信息以JSON格式输出,包含等级、时间戳、消息和追踪ID,便于后续被ELK等系统解析。#!/bin/bash # 部署前环境健康检查 if ! systemctl is-active --quiet nginx; then echo "Nginx 未运行,启动服务" sudo systemctl start nginx fi # 拉取最新代码 cd /var/www/app || exit git pull origin main # 安装依赖并重启服务 npm install pm2 reload app该脚本首先验证 Nginx 服务状态,确保前置服务可用;随后更新应用代码并重新加载运行实例。关键参数说明:`systemctl is-active --quiet` 用于静默检测服务状态,`pm2 reload` 支持零停机热重载。gopsutil库实现跨平台资源数据获取,以下为CPU与内存采集示例:package main import ( "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/mem" "time" ) func collectMetrics() { // 采集CPU使用率(采样1秒) cpuPercent, _ := cpu.Percent(time.Second, false) // 采集内存信息 memInfo, _ := mem.VirtualMemory() // 输出指标 log.Printf("CPU: %.2f%%, Memory: %.2f%%", cpuPercent[0], memInfo.UsedPercent) }上述代码每秒轮询一次系统状态,cpu.Percent返回浮点切片,索引0表示整体利用率;mem.VirtualMemory()提供总内存、已用内存及使用百分比。| 指标类型 | 采集频率 | 阈值告警 |
|---|---|---|
| CPU Usage | 1s | ≥85% |
| Memory Usage | 1s | ≥90% |
| Disk I/O | 5s | 持续写满 |
logrotate工具实现定时切割。/var/log/app/*.log { daily rotate 7 compress missingok notifempty postrotate systemctl kill -s HUP app.service endscript }上述配置表示:每日轮转一次,保留最近7个备份,启用压缩。postrotate脚本通知服务重新打开日志文件句柄,确保写入新文件。asyncio与asyncssh库可构建轻量级批量调度器:import asyncio import asyncssh async def run_command(host, cmd): try: conn = await asyncssh.connect(host, username='admin') result = await conn.run(cmd) print(f"{host}: {result.stdout.strip()}") conn.close() except Exception as e: print(f"{host} error: {e}") async def dispatch_tasks(hosts, command): tasks = [run_command(h, command) for h in hosts] await asyncio.gather(*tasks) # 启动批量命令执行 asyncio.run(dispatch_tasks(["192.168.1.10", "192.168.1.11"], "uptime"))该代码通过异步连接建立并行 SSH 会话,显著降低任务总耗时。参数hosts定义目标主机列表,command指定待执行命令。asyncio.Semaphore控制最大并发量// 使用 OpenTelemetry 进行分布式追踪 ctx, span := tracer.Start(ctx, "processPayment") defer span.End() if err := validateInput(input); err != nil { span.RecordError(err) // 记录错误但不中断流程 return err }该模式已在多个高并发支付系统中验证,有效提升了故障排查效率。| 技术方向 | 当前成熟度 | 典型应用场景 |
|---|---|---|
| Serverless Kubernetes | 成熟 | 突发流量处理 |
| 量子密钥分发(QKD) | 试验阶段 | 金融骨干网加密 |
架构演进路径图
单体 → 微服务 → 服务网格 → 函数化 + 边缘协同
每阶段伴随监控粒度细化:主机级 → 容器级 → 调用级 → 事件级