命令合法性

仅符合以下规则,命令合法:

命令为小写字母

可用AND,NOT,OR连接命令,NOT可在开头,如a AND NOT b

(AND,OR NOT不能连续)

输入多行命令,输出0或1,0代表命令不合法,1代表合法

输入用例

a AND AND b
A AND b
a and b
a AND b
a AND b OR c OR NOT d

输出:0 0 0 1 1

import java.util.Scanner;
public class Main {
    public static int len(String []q,String p,int i){
        int n=p.length();
        switch (n){
            case 1://判断命令合法性
                char c=p.charAt(0);
                if(c<'a'||c>'z')return 0;
                else break;
            case 2:
                if(!p.equals("OR")) {
                    System.out.println("不是OR");
                    return 0;
                }
                if(q[0].equals("OR")) {
                    System.out.println("OR不能在开头");
                    return 0;
                }
                else break;
            case 3:
                if(q[0].equals("AND")) return 0;
                if(p.equals("AND")||p.equals("NOT")){
                    if(q[i].equals(p)&&q[i+1].equals(p)&&i<q.length-1)//连续AND NOT
                        return 0;
                    if(i==(q.length-1))return 0;//位于最后
                    if(p.equals("NOT")&&(q[i+1].length()!=1))
                        return 0;
                }else return 0;
            default:
                break;
        }
        return 1;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String s=in.nextLine();
            String []q=s.split(" ");
            for(int i=0;i<q.length;i++){
                int f=len(q,q[i],i);
                if(f==0) {
                    System.out.println(0);
                    break;
                }
                if((i==q.length-1)&&f==1)
                    System.out.println(1);

            }
        }
        in.close();
    }
}

 

以下是一个简单的网络自动化变更脚本示例,包含了配置前数据校验、命令合法性校验、配置过程中的报错提示、错误回滚和变更完成后的验证功能。这个示例使用的是 paramiko 库来实现 SSH 连接和执行命令,你可以根据自己的实际情况进行修改和扩展。 ```python import paramiko import time # 配置信息 hostname = '192.0.2.1' username = 'admin' password = 'admin' config_commands = [ 'interface loopback 0', 'ip address 10.0.0.1 255.255.255.255', 'description Test Loopback' ] # 数据校验 def validate_data(): # TODO: 实现你的数据校验逻辑 return True # 命令合法性校验 def validate_commands(): # TODO: 实现你的命令合法性校验逻辑 return True # SSH 连接 def ssh_connect(hostname, username, password): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname, username=username, password=password) return ssh # 执行命令 def execute_command(ssh, command): stdin, stdout, stderr = ssh.exec_command(command) output = stdout.read().decode('utf-8') error = stderr.read().decode('utf-8') if error: raise Exception('Command execution failed: %s' % error) return output # 配置回滚 def rollback_config(ssh): # TODO: 实现你的配置回滚逻辑 pass # 变更完成后的验证 def validate_config(ssh): # TODO: 实现你的变更完成后的验证逻辑 pass # 主函数 def main(): if not validate_data(): print('Data validation failed') return if not validate_commands(): print('Command validation failed') return ssh = ssh_connect(hostname, username, password) try: # 备份配置 backup_config = execute_command(ssh, 'show running-config') # 执行配置命令 for command in config_commands: execute_command(ssh, command) time.sleep(1) # 验证配置 validate_config(ssh) except Exception as e: print('Error occurred during configuration: %s' % str(e)) rollback_config(ssh) return finally: ssh.close() print('Configuration succeeded') if __name__ == '__main__': main() ``` 上述代码中,`validate_data` 和 `validate_commands` 函数分别用于数据校验和命令合法性校验。你可以根据实际情况在这两个函数中实现你自己的逻辑。 `ssh_connect` 函数用于建立 SSH 连接,`execute_command` 函数用于执行命令并返回输出。如果命令执行失败,则会抛出异常并在主函数中进行错误处理和回滚。 在主函数中,首先进行数据校验和命令合法性校验。如果校验失败,则直接返回。如果校验通过,则建立 SSH 连接,并备份当前配置。接着依次执行配置命令。如果执行命令过程中出现错误,则会进行错误处理和回滚。如果执行成功,则进行配置验证。最后关闭 SSH 连接并输出结果。 需要注意的是,这个示例只是一个简单的示例,实际情况可能更加复杂。你需要根据自己的实际情况进行修改和扩展,并进行充分的测试和验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值