PHP 命令行腳本框架庫

項目地址: github.com/lvyahui8/rc…php

背景

部分業務使用PHP編寫運維腳本, 但PHP缺少一個易用的命令行程序開發庫. 此框架的基於註解的方式支持填空式的快速開發命令行腳本. 並提供統一的日誌|參數解析|控制檯格式輸出|幫助文檔能力.mysql

使用方法

引入依賴

在運維腳本項目中引入依賴.git

composer require hongye/rc-cmd
複製代碼

編寫運維工具類

建立一個工具類好比SampleTool, 並繼承\Ruochen\Tools\CommandTool, 分別在類和方法上加上以下註解. 最終經過調用 SampleTool::getInstance()->process(); 使類文件變爲腳本, 併爲類文件加上可執行權限.github

框架實現了一些易用的註解,基於註解快速定義命令、命令選項、命令參數. 因爲PHP自己並不支持註解, 故註解須要添加在文檔註釋中.sql

能夠爲IDE添加註解支持bash

@\Ruochen\Annotations\Command

此註解爲工具定義一個命令,屬性以下composer

  • name 可選值,如不設值,則命令名稱爲方法名
  • desc 可選值,命令的說明

@\Ruochen\Annotations\Operand

此註解爲命令定義一個操做數,屬性以下框架

  • name 必須,操做數名稱
  • mode 模式,枚舉值{"required","multiple","optional"}
    • required 表示此命令必須有此操做數
    • multiple 表示此操做數是多個值
    • optional 表示此操做數可選

@\Ruochen\Annotations\Option

此註解爲命令定義一個選項。此註解能夠註解在class或者command method上,若是註解在class上,則在全部command method上均可以訪問到運維

  • short 必須,選項縮寫
  • long 長選項
  • mode 模式,枚舉值
    • noArg 表示無參數,經常使用語開關選項
    • requiredArg 選項必須有參數 如:-f /var/mysqld.sock || --file=/var/mysqld.sock
    • optionalArg 選項可選參數
    • multipleArg 選項有多個參數

示例

命令工具文件 samplessh

#!/usr/bin/env php
<?php

namespace Ruochen\Tools;

use League\CLImate\CLImate;
use Ruochen\Annotations\Command;
use Ruochen\Annotations\Desc;
use Ruochen\Annotations\Operand;
use Ruochen\Annotations\Option;
use Ruochen\Foundation\CommandTool;
use Ruochen\Helpers\ANSIHelper;
/** * Class SampleTool * @package Examples * @Option(short="d",long="database",desc="select one database",mode="requiredArg") */
class SampleTool extends CommandTool {

    /** * @Command(desc="query_xxx") * @Operand(name="key",mode="required") * @Desc("query some data") */
    public function query(){
        $database = $this->getOption('d');
        $this->logger->info("query.....$database");
    }

    /** * @Command(name="ll") * @Desc(value="list all data") * @Option(short="f",long="filter",mode="requiredArg",desc="xxxxx") */
    public function list(){
        $cli = new CLImate();
        $outTables [] = [
            'Pid','Name','Stat',
        ];
        $outTables [] = [
            1996, 'crond', ANSIHelper::colorWrap('OK', ANSIHelper::FG_BLUE),
        ];
        $outTables [] = [
            1107, 'sshd', ANSIHelper::colorWrap('ERR', ANSIHelper::FG_READ),
        ];
        $outTables [] = [
            1993, 'rsyslogd', ANSIHelper::colorWrap('UNKOWN', ANSIHelper::FG_YELLOW),
        ];
        $cli->columns($outTables);
    }


    /** * @Command("dp") * @Desc("dump all data") */
    public function dump(){
        $this->logger->info("dump.....");
    }
}

$sampleTool = SampleTool::getInstance();

$sampleTool->process();
複製代碼

命令行提示

$ ./sample
Usage: ./sample <command> [options] [operands]

Options:
  -v, --version   Show version information and quit
  -h, --help      Show this help and quit
  -d, --database  select one database

Commands:
  query  query_xxx
  ll     list all data
  dp     dump all data
複製代碼
$ ./sample ll
Pid      Name         Stat
1996     crond        OK
1107     sshd         ERR
1993     rsyslogd     UNKOWN
複製代碼
$ ./sample query xxxx -d lvyahui
[2017-12-26 11:51:45] SampleTool.INFO: query.....lvyahui [] []
複製代碼

運行依賴

  • php >= 7.0
  • mbstring
  • mcrypt
  • hash
  • composer

項目地址: github.com/lvyahui8/rc…

相關文章
相關標籤/搜索