当前位置: 首页 > news >正文

【ansible】实施任务控制

目录

实施任务控制

一,循环(迭代)--- loop

1,利用loop----item循环迭代任务 

2,item---loop循环案例

1,定义item循环列表

2,通过变量应用列表格式

3,字典列表(迭代嵌套子变量)

4,register变量与loop                   

二,when条件任务语法

1, when条件测试案例

2,when条件表达语法

3, 多条件表达and or语法

4,组合循环和有条件判断任务

三,实施处理程序

1,Handlers和notify触发条件

2, tags标签定义

四,处理任务失败

1,ignore_errors 忽略错误继续任务

2, force_handlers: yes

3, failed_when

4, change_when 满足条件输出change状态

5,block、rescue、always块和错误处理


实施任务控制

一,循环(迭代)--- loop

1,利用loop----item循环迭代任务

通过循环管理员不需要编写多个使用同一模块的任务。例:他们不需要编写五个任务来确保存在五个用户,而是只需要编写一个任务来对含有五个用户的列表迭代,从而确保他们都在。

ansible支持loop关键字对一组项目迭代任务,可以配置循环以利用各个项目、列表中各个文件的内容、生成数字序列化或更为复杂的结构来重复任务。

 

 

2,item---loop循环案例

loop关键字添加到任务中,将应对其迭代任务的项目列表取为值。 循环item保存每个迭代过程中使用的值。

确定多个服务运行

1定义item循环列表

(1)查看node1主机上的httpd与named服务是否启动,发现没启动

[root@node1 ~]# systemctl status httpd

[root@node1 ~]# systemctl status named

(2)查看node2主机上的httpd与named服务是否启动,发现没启动

[root@node2 ~]# systemctl status httpd

[root@node2 ~]# systemctl status named

(3)编辑playbook4.yml文件

---

- name: play1

  hosts: test

  tasks:

    - name: task1

      service:

        name: "{{ item }}"

        state: started

      loop:

        - httpd                 //定义item循环列表

        - named                 bind的服务名位named

(4)执行脚本文件playbook4.yml,使其启动httpd服务与bind服务

[root@server var_test]# ansible-playbook playbook4.yml

(5)查看node1主机上的httpd与named服务是否启动,发现此时已经启动

[root@node1 ~]# systemctl status httpd

[root@node1 ~]# systemctl status named

(6)查看node2主机上的httpd与named服务是否启动,发现此时已经启动

[root@node2 ~]# systemctl status httpd

[root@node2 ~]# systemctl status named

2,通过变量应用列表格式

(1)此时node1上的httpd与named服务是关闭的

[root@node1 ~]# systemctl status httpd

[root@node1 ~]# systemctl status named

(2)此时node2上的httpd与named服务是关闭的

[root@node2 ~]# systemctl status httpd

[root@node2 ~]# systemctl status named

(3)编辑playbook4.yml文件

---

- name: play1

  hosts: test

  vars:

    pkname:

      - httpd

      - named

  tasks:

    - name: task1

      service:

        name: "{{ item }}"

        state: started

      loop: "{{ pkname }}"           //通过变量应用列表格式

(4)执行playbook4.yml剧本文件

[root@server var_test]# ansible-playbook playbook4.yml

(5)查看node1主机上的httpd与named服务是否启动,发现此时已经启动

[root@node1 ~]# systemctl status httpd

[root@node1 ~]# systemctl status named

(6)查看node2主机上的httpd与named服务是否启动,发现此时已经启动

[root@node2 ~]# systemctl status httpd

[root@node2 ~]# systemctl status named

3,字典列表(迭代嵌套子变量)

(1)编辑剧本playbook4.yml

---

- name: play1

  hosts: test

  tasks:

    - name: task1

      user:

        name: "{{ item.name }}"

        state: present

        groups: "{{ item.groups }}"

      loop:

        - { name: 'jane',groups: 'wheel'}

        - { name: 'joe', groups: 'root' }

(2)执行剧本playbook4.yml

[root@server var_test]# ansible-playbook playbook4.yml

(3)在node1上可以查看到playbook4中创建的用户以及附加组

[root@node1 ~]# id jane
[root@node1 ~]# id joe

(4)在node2上可以查看到playbook4中创建的用户以及附加组

[root@node2 ~]# id jane
[root@node2 ~]# id joe

4,register变量与loop

(1)编写剧本文件playbook4.yml

- name: play1

  gather_facts: no

  hosts: localhost

  tasks:

    - name: task1

      shell: "echo this is my item: {{ item }}"        

      loop:

        - one

        - two

      register: echo_results               //变量注册

    - name: task2

      debug:

        var: echo_results                    //变量内容显示在屏幕上

(2)执行剧本文件

[root@server var_test]# ansible-playbook playbook4.yml

                    

二,when条件任务语法

when语句用于有条件运行任务。它取要测试的条件为值。如果条件满足,则运行任务。如果条件不满足则跳过任务。

 

 

1, when条件测试案例

案例一:可以测试当run_my_task 为true的时候执行否则不执行

(1)此时的node1主机上没有安装bind

[root@node1 ~]# rpm -q bind  

(2)编辑playbool4.yml文件,使得当my_task为true,在node1安装bind

---

- name: play1

  hosts: node1

  vars:

    my_test: true

  tasks:

    - name: task1

      yum:

        name: bind

      when: my_test

(3)执行剧本playbool4.yml

[root@server var_test]# ansible-playbook playbook4.yml

(4)此时在node1主机上查看bind,发现已经被安装

[root@node1 ~]# rpm -q bind

    案例2: 判断my_service是否有值,若有值则用作安装的软件包名称,若没有定义变量则跳过任务不显示错误

(1)此时的node1主机上没有vsftpd包

[root@node1 ~]# rpm -q vsftpd

(2)编辑playbook4.yml文件,在node1上安装vsftpd包

---

- name: play1

  hosts: node1

  vars:

    my_package: vsftpd

  tasks:

    - name: task1

      yum:

        name: "{{ my_package }}"

      when: my_package is defined

(3)执行剧本playbook4.yml

[root@server var_test]# ansible-playbook playbook4.yml

(4)此时在node1主机上查看vsftpd,发现已经被安装

[root@node1 ~]# rpm -q vsftpd

2,when条件表达语法

操作

示例

等于(值为字符串)

ansible_machine == "x86_64"

等于(值为数字)

max_memory == 512

小于(小于等于)

Min_memory <128 min_memory <= 512

大于 (大于等于)

Min_memory > 256 max_memory >= 512

不等于

Min_memory != 512

变量存在

Min_memory is defined

变量不存在

Min_memory is not defined

布尔值变量是true. 1、True 或yes 的求值为true 变量Memory_available值存在为true则执行

Memory_available

布尔值变量是false. 0、 False 或no的求值为false 变量Memory_available值存在为true则执行

Not memory_available

第一个变量的值存在,在第二个变量的列表中条件满足 (事实变量在变量列表中满足要求)

Ansible_distribution in supported_distros

- name: Demonstrate the inkeyword

  hosts: all

  gather_facts: yes

  Vars:

    supperted_distros:

        - Redhat

        - Fedora

  Tasks:

    - name: Install httpd using yum, where supported

       yum:

           name: http

           state:  present

       when: ansible_distribution in supperted_distros

    When 语句的缩进,由于when语句不是模块变量,他必须通过缩进到任务的最高级别,放置在模块的外面。

    任务是YAML散列/字典,when语句只是任务重的又一个键,就如任务的名称以及它所使用的模块一样。通常的惯例是将可能存在的任何when关键字放在任务名称和模块的后面。

 

 

 

3, 多条件表达and or语法

语法一:

when:ansible_distribution == "Redhat" or ansible_distribution == "Fedora"

When: ansible_distribution_version == "7.5" and ansible_kernel == "3.10.0-327.el7.x86_64"

语法二:

使用and语句时,则必须要所有条件为真时,才执行相应任务

    when:

        - ansible_distribution_version == "7.5"

        - ansible_kernel == "3.10.0-327.el7.x86_64"

    使用括号分组条件,可以更好的表达复制的条件语句

    When: >

         ( ansible_distribution_version == "redhat" and

          ansible_distribution_major_version == "7" )

         or

          (  ansible_distribution_version == "fedora" and

          ansible_distribution_major_version == "28" )

4,组合循环和有条件判断任务

对某类任务结合使用when和loop时,将对每项检查when语句

yum安装软件包,只要/上挂载的文件系统有超过300M的可用空间。 Ansible_mounts 事实是一组字典,各自代表一个已挂在文件系统的相关事实。循环迭代每个字典,只要找到了代表两个条件都为真的已挂载文件系统的字典时,条件语句才得到满足。

- name: install mariadb-server if enough space on root

  yum:

    name: mariadb-server

    state: latest

  loop: "{ ansible_mounts }"                        //字典循环

  when: item.mount == "/" and item.size_available > 300000000            //当两个条件都满足则执行安装

三,实施处理程序

1,Handlers和notify触发条件

  1. notify (通知)此action可用于每个play最后被触发这样避免多次发生改变时都执行指定操作,仅在所有变化发生完成后一次性的执行操作。在notify中列出的操作作为handler及notify中调用handlers中定义的操作。(notify判断是否有发生改变一旦发生改变触发handlers执行指定操作)
  2. handlers (操作者)是task列表这些task和前述的task没有本质区别,用于当关注资源发生变化时才会采取一定的操作。

 

案例:实现只有修改了配置文件才会重启服务

 (1)将/etc/httpd/conf/httpd.conf 复制到/目录下

[root@server var_test]# cp /etc/httpd/conf/httpd.conf /

 

(2)编辑文件/httpd.conf,将端口改为10000

#Listen 80

Listen 10000

 

 

(3)在受控主机node1与node2上关闭防火墙,并设置selinux为permissive

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0

 

[root@node2 ~]# systemctl stop firewalld
[root@node2 ~]# setenforce 0

 

(4)创建playbook5.yml文件

- name: handlers test

  hosts: all

  tasks:

    - name: install httpd service

      yum:

        name: httpd

        state: installed

    - name: copy config file

      copy:

        src:  /httpd.conf

        dest: /etc/httpd/conf/httpd.conf

      notify:

         - restart service

    - name: start httpd service

      service:

        name: httpd

        state: started

  handlers: 

    - name: restart service

      service:

        name: httpd

        state: restarted

 

 

 

(5)执行剧本playbook5.yml

因为控制端的端口号为10000,发生了修改,所以会重启服务

[root@server var_test]# ansible-playbook playbook5.yml

 

(6)再次执行剧本文件playbook5.yml,此时的配置文件并未发生任何改变,所以服务并未重新启动

[root@server var_test]# ansible-playbook playbook5.yml

 

(7)此时再将配置文件的端口号由10000改为80

Listen 80

 

 

(8)再次执行剧本playbook5.yml,发现又会重启服务,因为/etc/httpd文件发生改变

[root@server var_test]# ansible-playbook playbook5.yml

 

注意:handlers写在notify模块之后

2, tags标签定义

tags标签: 通过此标签来指定playbook文件执行哪条命令

执行 :-t   标签名

 

案例:仅执行playbook5.yml中的安装httpd命令

 (1)编辑playbook5.yml文件

- name: handlers test

  hosts: all

  tasks:

    - name: install httpd service

      yum:

        name: httpd

        state: installed

      tags: yum_httpd

    - name: copy config file

      copy:

        src:  /httpd.conf

        dest: /etc/httpd/conf/httpd.conf

      notify:

         - restart service

    - name: start httpd service

      service:

        name: httpd

        state: started

  handlers: 

    - name: restart service

      service:

        name: httpd

        state: restarted

 

 

 

 (2)此时执行剧本文件playbook.yml会发现只执行了装包命令

[root@server var_test]# ansible-playbook -t yum_httpd playbook5.yml

 

 

 

四,处理任务失败

1,ignore_errors 忽略错误继续任务

默认情况下任务失败时play会终止。可以通过ingnore乎略失败,其他任务可以继续执行。

案例:

(1)编辑剧本文件playbook6.yml

- name: restart httpd is postfix is running

  hosts: all

  tasks:

    - name: get postfix server status

      command: /usr/bin/systemctl is-active postfix  

    #  ignore_errors: yes         

      register: result       

    - name: restart apache httpd based on postfix status

      service:

        name: httpd

        state: restarted

      when: result.rc == 0

(2)此时受控端主机并未安装postfix,所以任务执行会失败

[root@server var_test]# ansible-playbook playbook6.yml

(3)编辑剧本文件playbook6.yml

- name: restart httpd is postfix is running

  hosts: all

  tasks:

    - name: get postfix server status

      command: /usr/bin/systemctl is-active postfix

      ignore_errors: yes         

      register: result

    - name: restart apache httpd based on postfix status

      service:

        name: httpd

        state: restarted

      when: result.rc == 3

(4)此时受控端主机虽然并未安装postfix,但是会跳过失败,继续执行下面的任务

[root@server var_test]# ansible-playbook playbook6.yml

2, force_handlers: yes

如果任务失败并且play在该主机上终止,则收到play中早前任务通知的处理程序将不会运行。

 

(1)此时的/etc/http配置文件并未做任何改变,所以服务httpd不会自启

[root@server var_test]# ansible-playbook playbook5.yml

 

 

(2)将/etc/httpd配置文件进行修改,notify触发成功,但是后面的服务名错误,force_handlers: yes 关键字还是会执行handlers中的命令

 

Listen 1004

 

 (3)编辑playbook5.yml文件 

- name: handlers test

  force_handlers: yes

  hosts: all

  tasks:

    - name: install httpd service

      yum:

        name: httpd

        state: installed

    - name: copy config file

      copy:

        src:  /httpd.conf

        dest: /etc/httpd/conf/httpd.conf

      notify:

         - restart service

    - name: start httpd service

      service:

        name: http

        state: started

  handlers:  

    - name: restart service 

      service:

        name: httpd

        state: restarted

 

(4)此时执行剧本文件playbook5.yml;即使后面的服务名写错了,也能执行handlers

[root@server var_test]# ansible-playbook playbook5.yml

 

 

 

3, failed_when

failed_when其实是ansible的一种错误处理机制,是由fail模块使用了when条件语句的组合效果。

我们也可以直接通过fail模块和when条件语句,写成如下:

 - name: run user

   shell: /usr/local/bin/create_users.sh

   register: result

   ignore_errors: yes

- name: fail the play if the previous command did not succeed

  fail: 

     msg: "please create user"

  when: "'not' in  result.stdout"

 

4, change_when 满足条件输出change状态

 当我们控制一些远程主机执行某些任务时,当任务在远程主机上成功执行,状态发生更改时,会返回changed状态响应,状态未发生更改时,会返回OK状态响应,当任务被跳过时,会返回skipped状态响应。我们可以通过changed_when来手动更改changed响应状态。

 

(1)Playbook5.yml案例中,如果配置文件/httpd.conf并未发生改变,执行显示ok

[root@server var_test]# ansible-playbook playbook5.yml

 

 (2)编辑playbook5.yml文件

- name: handlers test

  hosts: all

  tasks:

    - name: install httpd service

      yum:

        name: httpd

        state: installed

    - name: copy config file

      copy:

        src:  /httpd.conf

        dest: /etc/httpd/conf/httpd.conf

      register: cmd_v1

      changed_when: not cmd_v1.changed

      notify:

         - restart service

    - name: start httpd service

      service:

        name: httpd

        state: started

  handlers: 

    - name: restart service

      service:

        name: httpd

        state: restarted

 

 

(3)修改后,此时来执行剧本文件playbook5.yml,已经由ok状态变为changed状态

[root@server var_test]# ansible-playbook playbook5.yml

 

 

5,block、rescue、always块和错误处理

通过块,也可结合rescue和always语句来处理错误,如果块中的任何任务失败,则执行其rescue块中的任务来进行恢复。在block子句中的任务以及rescue子句中的任务(如果出现故障)运行之后,always子句中的任务运行。

总结:

  • block: 定义要运行的主要的任务。
  • rescue: 定义要在block子句中定义的任务失败时运行的任务。
  • always:定义始终都独立运行的任务,不论block和rescue子句中定义的任务是否成功还是失败。

block有错才会执行rescuealways怎么都会执行

案例: 在playbook中实施块即使block子句中定义的任务失败,rescue和always子句中定义的任务也会执行。

创建目录文件和文本文件;注意如果默认路径下存在同名文件需要进一步处理才能创建该文件。

(1)编辑playbook7.yml文件

---

- name:

  hosts: localhost

  tasks:

    - name: block module

      block:

        - name:  create directory

          file:

            name: /aaa

            state: directory  

      rescue:

        - name: backup filenmae

          shell: mv /aaa /aaa.backup

        - name: create directory force

          file:

            name: /aaa

            state: directory

            force: yes

      always:

        - name:  create file

          file:

            name: /newfile

            state: touch

(2)执行剧本playbook7.yml文件

[root@server var_test]# ansible-playbook playbook7.yml

(3)目录/aaa与文件/newfile已经被创建

[root@server var_test]# ls -l /aaa
[root@server var_test]# ls -l /newfile
[root@server var_test]# cd /aaa

相关文章:

【ansible】实施任务控制

目录 实施任务控制 一&#xff0c;循环&#xff08;迭代&#xff09;--- loop 1&#xff0c;利用loop----item循环迭代任务 2&#xff0c;item---loop循环案例 1&#xff0c;定义item循环列表 2&#xff0c;通过变量应用列表格式 3&#xff0c;字典列表&#xff08;迭代嵌套子…...

49天精通Java,第11天,java接口和抽象类的异同,default关键字

目录一、什么是接口二、接口的特点三、接口和类的区别四、接口和抽象类的区别五、接口的声明方式六、default默认方法大家好&#xff0c;我是哪吒。 一、什么是接口 Java接口是一系列方法的声明&#xff0c;是一些方法特征的集合&#xff0c;一个接口只有方法的特征没有方法的…...

JAVA练习99-逆波兰表达式求值

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-逆波兰表达式求值 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 4月5…...

恶意软件、恶意软件反杀技术以及反病毒技术的详细介绍

1.恶意软件简单介绍恶意软件是指在计算机系统上执行恶意任务的病毒、蠕虫和特洛伊木马的程序&#xff0c;通过破坏软件进程来实施控制。腾讯移动安全实验室发布的数据显示&#xff0c;恶意软件由多种威胁组成&#xff0c;会不断弹出&#xff0c;所以需要采取多种方法和技术来进…...

【数据库运维】mysql备份恢复练习

目录 数据库备份&#xff0c;数据库为school&#xff0c;素材如下 1.创建student和score表 2.为student表和score表增加记录 3.备份数据库school到/backup目录 4.备份MySQL数据库为带删除表的格式&#xff0c;能够让该备份覆盖已有数据库而不需要手动删除原有数据库 5.直接将My…...

刷题30-对称的二叉树

对称的二叉树 思路&#xff1a;用递归&#xff0c;首先明白递归中止的条件是什么 搬用别人的看法&#xff1a; 做递归思考三步&#xff1a; 1.递归的函数要干什么&#xff1f; 函数的作用是判断传入的两个树是否镜像。 输入&#xff1a;TreeNode left, TreeNode right 输出…...

精选简历模板

1.应届生通用简历模板&#xff08;.docx) 适用于应届生找工作的学生群体 https://download.csdn.net/download/weixin_43042683/87652099https://download.csdn.net/download/weixin_43042683/87652099 部分缩略图如下&#xff1a; 2.研究生通用简历模板&#xff08;.docx)…...

蓝桥杯嵌入式第十三届客观题解析

文章目录 前言一、题目1二、题目2三、题目3四、题目4五、题目5六、题目6七、题目7八、题目8九、题目9十、题目10总结前言 本篇文章将带大家来学习蓝桥杯嵌入式的客观题了,蓝桥杯嵌入式的客观题涉及到模电,数电,单片机等知识,需要非常扎实的基础,客观题不能急于求成只能脚…...

【Redis】线程问题

文章目录单线程版本演化工作流程为什么逐渐又加入了多线程特性?影响Redis性能的主要因素->网络I/O多线程工作流程Unix网络编程中的五种I/O模型I/O多路复用工作原理&#xff1a;select、poll、epoll为什么Redis快单线程与多线程的比较配置文件开启多线程单线程 版本演化 Re…...

【算法题】2498. 青蛙过河 II

题目&#xff1a; 给你一个下标从 0 开始的整数数组 stones &#xff0c;数组中的元素 严格递增 &#xff0c;表示一条河中石头的位置。 一只青蛙一开始在第一块石头上&#xff0c;它想到达最后一块石头&#xff0c;然后回到第一块石头。同时每块石头 至多 到达 一次。 一次…...

【新2023Q2押题JAVA】华为OD机试 - 整理扑克牌

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:整理扑克牌 题目 给定一组数…...

【hello C语言】文件操作

目录 1. 什么是文件&#xff1f; 2. 程序文件 3. 数据文件 4. 文件名 5. 文件类型 5.1 二进制文件 5.2 文本文件 5.3 数据在内存中的存储 6. 文件缓冲区 7. 文件指针 8. 文件的打开和关闭 9. 文件的顺序读写 10. 文件的随机读写 10.1 fseek&#xff1a;根据文件指针的位置和偏移…...

OBCP第八章 OB运维、监控与异常处理-数据库监控

系统监控视图&#xff1a;系统视图 OceanBase 数据库为多租户架构&#xff0c;租户分为两种类型&#xff1a;普通租户以及 sys 租户。OceanBase 数据库系统表都存储在 sys 租户&#xff0c;且主键中存储租户号&#xff08;tenant_id&#xff09;&#xff0c;区分每个租户的内容…...

已经提了离职,还有一周就走,公司突然把我移出企业微信,没法考勤打卡, 还要继续上班吗?...

黎明前的黑暗最容易出事&#xff0c;离职前的几天也最容易出幺蛾子&#xff0c;比如下面这位网友的遭遇&#xff1a;已经提了离职&#xff0c;还有一周就正式离职了&#xff0c;公司突然把我移出企业微信&#xff0c;没法考勤打卡了&#xff0c; 还要继续上班吗&#xff1f;该怎…...

Win11启用IE方法

呉師傅 Win11是微软目前的最新系统&#xff0c;尽管该系统非常不错&#xff0c;但是还是有很多不一样的地方&#xff0c;有的用户发现Win11没有了IE浏览器&#xff0c;那么Win11没有IE浏览器怎么办呢&#xff0c;有的旧网页需要IE浏览器才能进入&#xff0c;下面就给大家提供一…...

有人靠ChatGPT 狂赚200W !有人到现在,连账号都没开通......

作者| Mr.K 编辑| Emma来源| 技术领导力(ID&#xff1a;jishulingdaoli)互联网风水轮流转&#xff0c;当初元宇宙盛极一时之际&#xff0c;在一些知识付费平台上&#xff0c;任何一个关于元宇宙的课程或培训&#xff0c;都很热销&#xff0c;有一定号召力的博主&#xff0c;登…...

基于GD32F470的mbedtls 3DES算法测试

3DES加密算法介绍 3DES数据加密算法是一种可逆的对称加密算法&#xff0c;也称三重数据加密算法。3DES块加密算法的设计用来提供一种相对简单的方法&#xff0c;即通过增加DES的密钥长度来避免类似的攻击&#xff0c;而不是设计一种全新的密码算法&#xff0c;目前3DES作为DES…...

为什么一些人很瞧不起 Java?

前言 瞧不起Java的大概是因为&#xff1a; Java 被认为是一门“老”语言&#xff0c;过时了。事实上&#xff0c;Java 由于其稳定性和安全性&#xff0c;一直是企业级应用开发的首选语言。而且&#xff0c;Java 语言还在不断更新和发展&#xff0c;例如 Java 8 引入了很多新特…...

DropMAE: Masked Autoencoders with Spatial-Attention Dropout for Tracking Tasks

摘要 ​ 在本文中&#xff0c;我们研究了掩码自动编码器&#xff08;MAE&#xff09;预训练的视频基于匹配的下游任务&#xff0c;包括视觉目标跟踪&#xff08;VOT&#xff09;和视频对象分割&#xff08;VOS&#xff09;。MAE的一个简单扩展是在视频中随机掩码帧块并重建帧像…...

【shell 基础(11)循环之for】带列表:空格子串、换行子串、展开、命令替换、seq;不带列表:接受参数、类C

文章目录一. 带列表的for循环1. 语法2. 例子2.1. 循环字串2.2. 展开或命令替换&#xff1a;数字循环2.3 命令替换&#xff08;输出换行&#xff09;作为list二. 其他for循环1. 不带列表的循环2. 类C的for循环一. 带列表的for循环 1. 语法 for var in list do commanddone注意…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...