Other

shell脚本之函数

目录一、函数概念及格式1、函数的概念2、函数的格式2.1 格式一2.2 格式二二、函数的返回值1、return的作用2、实例操作一:return返回值2.1 格式2.2 运行结果三.函数传参1、实例操作一1.1、格式2.1、输出结果四、函数变量的作用范围1、概念2、实例操作2.1 格式2.2 输出结果五、函数的递归1、函数的递归应用:阶乘1.1 格式1.2 实例操作六、创建函数库1、创建函数库格式2、调用函数脚本格式3、输出结果 一、函数概念及格式 1、函数的概念 函数定义:封装的可重复利用的具有特定功能的代码 函数就是可以在shell脚本当中做出一个类似自定义执行的命令的东西,最大的功能就是简化我们很多的代码。 将命令序列按照格式书写在一起 可方便重复使用命令序列 2、函数的格式 2.1 格式一 [function] 函数名 (){ 命令序列 [return x] #使用return或者exit可以显式的结束函数 } 2.2 格式二 函数名(){ 命令序列 } 二、函数的返回值 1、return的作用 返回函数结果 语法为:return+表达式 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果。return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值, 由return后面的参数指定。return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!当执行return语句时,即使函数主体中还有其他语句,函数执行也会停止! 使用原则: 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码; 退出状态码必须是0~255,超出时值将为除以256取余 2、实例操作一:return返回值 2.1 格式 #!/bin/bash function test1 { read -p 请输入一个值: value return $[$value * 2] } test1 #调用函数 echo $?  2.2 运行结果 三.函数传参 函数也是有参数的,它的内置变量与shell脚本很类似,函数名称代表示$0,而后续的变量也是以$1、$2…来替换的

CentOS 6中创建及管理LVM逻辑卷

转至:https://www.ibadboy.net/archives/1903.html#%E9%80%BB%E8%BE%91%E5%8D%B7%E7%9A%84%E6%89%A9%E5%AE%B9 文章目录 LVM简介: 创建LVM: 一、安装LVM软件包 二、创建物理磁盘的分区 三、创建物理卷 四、创建卷组 五、划分逻辑卷 管理LVM: 卷组的扩容 逻辑卷的扩容 LVM简介: LVM是逻辑管理卷的简写,其可以将多块物理磁盘的分区组成一个大的卷组(可以把他想象成是一个大的资源池),再在卷组上划分出逻辑卷并在其上建立文件系统最终供用户使用。 LVM的好处是可以动态的增加逻辑卷的大小,这样就不用面临随着业务发展,原本的分区空间不足的尴尬啦! 下面是LVM的结构图,最下面是物理磁盘分区,其上是物理卷(一个物理磁盘分区对应一个物理卷),再往上是我称之为“资源池”的卷组,这个“资源池”的容量是由组成其的物理卷的总容量决定的,而最上面则是可以被当成“普通分区”来使用的逻辑卷,逻辑卷可以划分很多个(默认一个卷组可以划分256个逻辑卷),只要其加起来的容量不超过“资源池”的容量就好!   创建LVM: 一、安装LVM软件包 通常情况下,CentOS中都有自带LVM软件包,但为了以防万一,我还是把安装命令贴出来吧~ [root@localhost ~]# yum install -y lvm  二、创建物理磁盘的分区 记得要先添加一块空磁盘呐,本实验中我添加了一块8GB大小的SCSI磁盘。 查看新添加的磁盘。 [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 4.2G 0 rom /media/cdrom sda 8:0 0 8G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 7.5G 0 part ├─VolGroup-lv_root (dm-0) 253:0 0 6.

xshell官网地址-免费下载

 官网地址: https://www.xshell.com/zh/xshell/ 1.点击下载:  2.点击免费授权页面   3.填写邮件,选择自己需要的软件,一般选择两者,根据个人需要选择哦,下载链接会发送至你的邮箱。   

mysql-DQL查询语句优先级: and>or=in

一、and:and级别高于or,先执行and然后or;如果想要or想要先执行,需要加小括号; 查询工作岗位是:MANAGER 并工资大于2500:select empno,ename,job,sal from emp where job='manager' and sal>2500; 二、or: 查询工作岗位是MANAGER和SALESMAN员工: select empno,ename,job from emp where job='manager' or job='saleman'; (不要忘记单引号‘manager’ ‘saleman’) 三、and 和or同时出现,先执行and 后执行or,如果想要or先执行需要加括号 查询工资大于2500,并且部门编号为10和20部门的员工; 先查看表结构 desc emp 看着表结构写sql语句 select empno,ename,sal,deptno,dname from emp where sal > 2500 and (deptno = 10 or deptno = 20);   四、in包含,相当于多个or,(not in不在这个范围中) in后面的值不是区间,是具体的值。 in等同于or: 找出工作岗位是MANAGER和SALESMAN的员工? select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER'; select ename,job from emp where job in('SALESMAN', 'MANAGER'); not in: 不在这几个值当中。 查询薪资不是800和5000的员工(除了工资是800和5000的其他人工资) select ename,job from emp where sal not in(800, 5000);

15个MySQL常用基本SQL语句

在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。   在MySQL中,数据库称为database,数据表称为table,一个数据库软件中有多个数据库(databases),每个数据库中又可以有多个数据表(tables),最终,数据是存储在数据表中。 数据库和数据表之间的关系可以用下面这个图来表示,对于一个数据库来说,有多个数据表。 在正式开始写SQL语句之前,需要说明两点。 SQL语句不区分大小写。 每条SQL语句以分号(;)结尾(英文输入法下的分号)。 这里通过MySQL Workbench来写SQL代码,在Workbench中,执行一条SQL语句的方式有两种。 一种是通过上方快捷菜单中的按钮。 另一种是通过快捷键Ctrl+Enter。    了解了这之后,接下来介绍一些常见的命令,分两部分:数据库常用命令和数据表常用命令。 一、数据库常用SQL语句 1、查看有哪些数据库  show databases; 2、创建数据库  create database Testdb; 创建一个名为Testdb的数据库。 3、创建数据库并指定编码格式 有些时候,为了防止中文乱码,创建数据库的时候需要指定编码格式。 create database mydb character set utf8mb4; 4、使用某个数据库  use mydb; 使用mydb这个数据库,或者进入mydb这个数据库。 5、删除数据库  drop database Testdb; 删除Testdb这个数据库。 二、数据表常用SQL语句 1、查看有哪些数据表 进入某个数据库之后,想查看有哪些数据表,SQL语句为: use mydb; show tables; mydb是一个新建的数据库,所以自然是没有数据表。 2、创建数据表 建表SQL语句格式为: create table <tablename>( <字段名称> <数据类型>, <字段名称> <数据类型>, <字段名称> <数据类型>, .

mysql 不用orderby 某些情况下会乱序

一 背景     当我不传条件的时候,很正常的排序; 传了条件,乱序了; 目前的直觉是,不传条件,以id为索引,自然而然的顺序得到结果; 传了条件,则以index索引,当中tree get数set数的时候,顺序没有保证了。不能确定是不是正确。 二 order by有相同,不能保证id排序  mysql文档有说明 If multiple rows have identical values in the ORDER BY columns, the server is free to return those rows in any order, andmay do so differently depending on the overall execution plan. In other words, the sort order of those rows isnondeterministic with respect to the nonordered columns.......If it is important to ensure the same row order with and without LIMIT, include additional columns in the ORDER BY clauseto make the order deterministic.

Python 中的多线程和多进程

目录Python中的多进程安全导入主模块1.直接使用 Process 类创建子进程2.通过继承 Process 类创建子进程直接使用 Process 类创建子进程3.通过进程池 Pool 创建子进程通过继承 Process 类创建子进程直接使用 Process 类创建子进程4.with 语句管理进程池5.两个进程间的通信 Queue 和 Pipe + 分布式进程6.子进程 subprocess -- 待续Python 中的多线程1.直接使用 Thread 类创建子线程2.通过继承 Thread 类创建子线程3.线程池 -- 待续4.线程间通信5.线程局部变量单线程 + 异步I/O - 协程?-- 待续 Python中的多进程 Unix和Linux操作系统上提供了fork()系统调用来创建进程,调用fork()函数的是父进程,创建出的是子进程,子进程是父进程的一个拷贝,但是子进程拥有自己的PID。fork()函数非常特殊它会返回两次,父进程中可以通过fork()函数的返回值得到子进程的PID,而子进程中的返回值永远都是0。 Python的OS模块提供了fork()函数。由于Windows系统没有fork()调用,因此要实现跨平台的多进程编程,可以使用multiprocessing模块的Process类来创建子进程,而且该模块还提供了更高级的封装,例如批量启动进程的进程池(Pool)、用于进程间通信的队列(Queue)和管道(Pipe)等。 在Unix/Linux下,multiprocessing模块封装了fork()调用,使我们不需要关注fork()的细节。由于Windows没有fork调用,因此,multiprocessing需要“模拟”出fork的效果,父进程所有Python对象都必须通过pickle序列化再传到子进程去,所有,如果multiprocessing在Windows下调用失败了,要先考虑是不是pickle失败了。 安全导入主模块 应确保主模块可以被新启动的 Python 解释器安全导入而不会引发什么副作用(比如又启动了一个子进程)。例如,使用 spawn 或 forkserver 启动方式执行下面的模块,会引发 RuntimeError 异常而失败。 from multiprocessing import Process def foo(): print('hello') p = Process(target=foo) p.start() 应该通过下面的方法使用 if __name__ == '__main__': ,从而保护程序入口点: from multiprocessing import Process, freeze_support, set_start_method def foo(): print('hello') if __name__ == '__main__': freeze_support() set_start_method('spawn') p = Process(target=foo) p.

SQLAchemy mysqlconnector 密码包含特殊字符串解决办法

from sqlalchemy import create_engine from urllib.parse import quote_plus # 老版本python解释器通用 format # mysql_dict = dict( # host=127.0.0.1, # port=3306, # name=chatroom_project, # user=root, # pwd=XXX@123456 # ) # link = mysql+mysqlconnector://{user}:{pwd}@{host}:{port}/{name}.format(**mysql_dict) host = 127.0.0.1 port = 3306 name = chatroom_project user = root pwd = XXX@123456 link = fmysql+mysqlconnector://{user}:{quote_plus(pwd)}@{host}:{port}/{name} engine = create_engine( link, encoding=utf-8, echo=True # 是否输出日志 ) metadata.create_all(engine)  这里问题是 使用这个链接由py文件生成库表时,我的密码中包含了特别字符导致解析错误,  所以使用from urllib.parse import quote_plus 这个模块来加密下我的密码,问题就解决了 

SQL Server 对比两表数据一样升序不一样的列

对比两表数据一样升序不一样的列 declare @tablename_mask varchar(50) set @tablename_mask='A表' declare @tableid int print @tablename_mask select @tableid=id from sysobjects where type in ('U' ,'S') and name like @tablename_mask print @tableid --下面 declare @tablename_mask_new varchar(50) set @tablename_mask_new='A表 declare @tableid_new int print @tablename_mask_new select @tableid_new=id from sysobjects where type in ('U' ,'S') and name like @tablename_mask_new print @tableid_new select * from (select C.name,UPPER(D.name) ctype, case when (D.name='nvarchar' or D.name='varchar') and C.length=-1 then 'max' when D.name='nvarchar' or D.

sql优化

一次侧 d_firstminutehandledata SELECT count(1) FROM d_firstminutehandledata WHERE stationBranchId = 532 AND collectionTime BETWEEN '2022-01-13' AND '2023-03-01'   九万多条数据  SELECT collectionTime, stationBranchId, accHeat, accFlow, waterMeterAccFlow, Data_FMeterSFlow_A, totalElectricMeterElectricity FROM d_firstminutehandledata WHERE stationBranchId = 532 AND collectionTime BETWEEN '2022-01-13' AND '2023-03-01' LIMIT 10000   查询一万条数据21秒 SELECT collectionTime, stationBranchId, accHeat, accFlow, waterMeterAccFlow, Data_FMeterSFlow_A, totalElectricMeterElectricity FROM d_firstminutehandledata WHERE stationBranchId = 532 AND collectionTime BETWEEN '2022-01-13' AND '2023-03-01' ORDER BY collectionTime DESC LIMIT 10000     加上排序,同样是查询一万条数据,但是查询时间却变成了285秒