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

bash编程(马哥)

bash基础特性:

    命令行展开:~,{}

    命令别名:alias,unalias

    命令历史:history

    命令和路径补全:$PATH

    glob通配符:*,?,[],[^],

    快捷键:Ctrl+{a,e,l,c,u,k}

命令bash:

bash通配符及特殊符号:

通配符:

    ?:任意一个字符;

    *:匹配任意个任意字符;

    []:匹配括号内的任意一个字符;

    [^]:匹配非括号内的任意一个字符

特殊字符:

    '':单引号中,所有特殊字符都没有特殊含义;

    "":双引号中,除$(调用变量的值)、`(命令引用)、\(转义符)外,其他特殊字符没有特殊含义;

    ` `:等同于$();达到命令引用,即先执行本处命令;

    \:转义符,使跟\之后的特殊字符失去特殊含义;

    $:调用变量的值;

    #:在shell脚本中,#开头的行代表注释

bash脚本:

运行脚本:

    1、给予执行权限,通过具体的文件路径指定文件执行;  

    2、直接运行解释器,将脚本作为解释器程序的参数运行;

数据类型:

    一、字符

    二、数值

        1、整型

        2、浮点型

        (1)、单精度浮点型

        (2)、双精度浮点型

        3、布尔型

bash中的算术运算:man let

    +,-,*,/,%

实现算术运算:(乘法符号有些场景中需转义\)

    1、let var=算术表达式;例如 let sum=$num1+$num2

    2、var=$[算术表达式];例如 echo $[$num1+$num2]

    3、var=$((算术表达式));例如echo $(($num1+$num2))

    4、var=$(expr arg1 arg2 arg3 …);例如sum=$(expr $num1 + $num2)

bash内建的随机数生成器:$RANDOM;

    例如取出0-60之间# echo $[$RANDOM%60+1]

增强型赋值:man let;自增、自减:

    +=,-=,*=,/=,%=

    例如let count+=1、let count++

条件测试:判断某需求是否满足,需要有测试机制来实现;

测试命令:

    test EXPRESSION

    [ EXPRESSION ]

    [[ EXPRESSION ]]



 

bash的测试类型:

一、数值测试:

    -gt:大于;

    -lt:小于;

    -ge:大于等于;

    -le:小于等于;

    -eq:等于;

二、字符串测试:(注意:用于字符串比较的操作数要使用引号)

    ==:等于;

    >:大于;

    <:小于;

    !=:不等于;

    =~:左侧字符串是否被右侧pattern所匹配;此表达式一般用于[[ ]]中;

    -z “string”:字符串是否为空,空则为真,不空则为假;

    -n “string”:字符串是否非空,非空为真,空则为假;

三、文件测试:(man bash)

    -e file:存在测试;

    -b file:存在且为块设备文件;

    -c file:存在且为字符设备文件;

    -d file:存在且为目录文件;

    -f  file:存在且为普通文件;

    -g file:存在且拥有sgid权限;

    -u file:存在且拥有suid权限;

    -k file:存在且拥有sticky权限;

    -r file:存在且可读;

    -w file:存在且可写;

    -x file:存在且可执行;

    -s file:存在且非空;

    -t fd:fd表示文件描述符是否已经打开且与某终端相关;

    file1 -ef file2:是否为同一个设备上的相同inode;

    file1 -nt file2:file1是否新于file2;

    file1 -ot file2:file1是否旧于file2;

组合测试条件:

第一种方式:

command1 && command2

command1 || command2

! command

例如:[ -z “$(hostname)” ] || [ “$(hostname)” == “localhost.localdomain” ]

第二种方式:

expression1 -a expression2

expression1 -o expression2

! expression

例如:[ -z “$(hostname)” -o “$(hostname)” == “localhost.localdomain” ]

bash自定义退出状态码:

exit [n]:自定义退出状态码;

注意:脚本中一旦遇到exit命令,脚本会立即终止;终止状态码取决于exit命令后的数字;

注意:如果未给脚本指定状态退出码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码;


 

bash编程之用户交互:

read -p “提示语” 变量名

bash脚本编程:

    整数值比较:-ge 大于等于; -gt 大于; -eq 相等; -lt 小于; -ne 不相等;-le小于等于

    顺序执行

    选择执行:if、case

    循环执行:for、while、until

    函数:结构化编程及代码重用;function

选择执行:if语句(逐条件进行判断;第一次遇到为“真”条件时,执行其分支,而后结束)

单分支:

    if 判断条件;then

        条件为真的分支代码

    fi

双分支:

    if 判断条件;then

        条件为真的分支代码

    else

        条件为假的分支代码

    fi

多分支:

    if 判断条件1;then

        条件为真的分支代码

    elif 判断条件2;then

        条件为真的分支代码

    elif 判断条件3;then

        条件为真的分支代码

        …  

    else

        条件为假的分支代码

    fi

case语句:

    case $变量名 in

    模式1)

        命令序列1

        ;;

    模式2)

        命令序列2

        ;;

    *)

        默认执行的命令序列

        ;;

    esac

bash编程之for语句

循环执行:for语句

for 变量 in 列表;do

    循环体

done

for循环的特殊格式:

for ((控制变量初始化;条件判断表达式;控制变量的修正表达式));do

    循环体

done

控制变量初始化:仅在运行到循环代码段时执行一次;

控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断;

列表生成方式:

(1)直接给出列表;例如 for i in 1 2 3 4;then…

(2)整数列表:

(a){start..end};例如{1..10}代表1-10;

(b)$(seq [start [step]] end);例如:$(seq 1 2 10),代表10以内的奇数;

(3)返回列表的命令:$(COMMAND);例如$(ls /var)代表对列出/var目录下的文件列表;

(4)glob通配符

while语句:当条件为true时进入循环,条件为false时退出循环;

    while 条件;do

        循环体

    done

while循环的特殊用法(遍历文件的每一行):依次读取/path/to/somefile文件中的每一行,且将行赋值给变量line;

    while read line;do

        循环体

    done < /path/to/somefile

until语句:当条件为false时进入循环,条件为true时退出循环;

    until 条件;do

        循环体

    done

创建死循环:

    while true;do

        循环体

    done

    until false;do

        循环体

    done

循环控制语句(用于循环体)

continue [n]:提前结束第n层的本轮循环,而直接进入下一轮判断;

break [n]:提前结束循环;

function函数

语法一:

    function f_name {

        函数体...

    }

语法二:

    f_name () {

        函数体...

    }

bash脚本编程:

    变量:存储单个元素的内存空间;

    数组:存储多个元素的连续的内存空间;

数组名

    索引:编号从0开始,属于数值索引;注意:索引也可以使用自定义的格式,而不仅仅是数值格式;

bash的数组支持稀疏格式;

    引用数组中的元素:${ARRAY_NAME[INDEX]}

数组长度(数组中元素的个数):

    ${#ARRAY_NAME[*]}、${#ARRAY_NAME[@]}

引用所有元素

    ${ARRAY_NAME[*]}、${ARRAY_NAME[@]}

取出特定元素:数组切片

    ${ARRAY_NAME[@]:offset:number}

offset:要跳过的元素个数

number:要取出的元素个数;去偏移量之后的所有元素:${ARRAY_NAME[@]:offset};

声明数组:

declare -a ARRAY_NAME

declare -A ARRAY_NAME:关联数组:

数组元素的赋值方式:

    (1)一次只赋值一个元素:

        ARRAY_NAME[INDEX]=VALUE

    (2)一次赋值全部元素:

        ARRAY_NAME=(“VALUE1” “VALUE2″ …)

    (3)只赋值特定元素:

        ARRAY_NAME=([0]=”VALUE1″ [3]=”VALUE3” …)

    (4)让用户输入元素

        read -a ARRAY

例子:随机生产10个数保存于数组中,找出最大和最小值;

    declare -a nums

    declare -i max=0

    declare -i min=0

for i in {0..9};do

    nums[$i]=$RANDOM

    echo ${nums[$i]}

    if [ $i -eq 0 ];then

        min=${nums[$i]}

        max=${nums[$i]}

    else

        if [ ${nums[$i]} -gt $max ];then

            max=${nums[$i]}

        fi

        if [ ${nums[$i]} -lt $min ];then

            min=${nums[$i]}

        fi

    fi

done

echo “max: $max”

echo “min: $min”

向数组中追加元素:ARRAY[${#ARRAY[*]}]

删除数组中的某元素:unset ARRAY[INDEX]

关联数组:

declare -a ARRAY_NAME

ARRAY_NAME=([index_name1]=”VALUE1″     [index_name2]=”VALUE2″    …)

bash的字符串处理工具:

字符串切片:

    ${var:offset:number}:

    offset:要跳过的字符串个数

    number:要取出的字符串个数;去偏移量之后的所有字符串:${ARRAY_NAME[@]:offset};

    取字符串的最右侧几个字符:${var:  -lengh};注意冒号后面必须有一空白字符;

基于模式去子串:

${var#*word}:其中word可以是指定的任意字符;功能:自左而右,查找var变量所存储的字符串中,第一次出现的word,删除字符串开头至第一次出现word字符之间的所有字符;

${var##*word}:其中word可以是指定的任意字符;功能:自左而右,查找var变量所存储的字符串中,最后一次出现的word,删除字符串开头至最后一次出现word字符之间的所有字符;

${var%word*}:其中word可以是指定的任意字符;功能:自右而左,查找var变量所存储的字符串中,第一次出现的word,删除字符串最后一个字符向左至第一次出现word字符之间的所有字符;

${var%word*}:其中word可以是指定的任意字符;功能:自右而左,查找var变量所存储的字符串中,第一次出现的word,删除字符串最后一个字符向左至最后一次出现word字符之间的所有字符;

例子:url=http://www.lewis.com:80

${url##*:}:80

${url%%:*}:http

查找替换:

${var/pattern/substi}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substi替换之;

${var//pattern/substi}:查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substi替换之;

${var/#pattern/substi}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substi替换之;

${var/%pattern/substi}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substi替换之;

查找并删除:

${var/pattern}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,删除之。

${var//pattern}:查找var所表示的字符串中,所有被pattern所匹配到的字符串,删除之。

${var/#pattern}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,删除之。

${var/%pattern}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,删除之。

字符大小写转换:

${var^^}:把var中的所有小写字母转换成大写;

${var,,}:把var中的所有大小字母转换成小写;

变量赋值:

${var:-value}:如果var为空或未设置,那么返回value;否则,则返回var的值;

${var:=value}:如果var为空或未设置,那么返回value,并将value赋值给var;否则,则返回var的值;

${var:+value}:如果var非空,则返回value;

${var:?error_info}:如果var为空或未设置,那么返回error_info;否则,则返回var的值;

为脚本程序使用配置文件:

    定义文本文件,每行定义“name=value”

    在脚本中source此文件即可

mktemp命令:创建临时文件或目录

-d:创建临时目录

–tmpdir:指明临时文件目录位置

例子:mktemp /tmp/test.XXX

install命令:功用类似cp命令

install [OPTION]… [-T] SOURCE DEST

install [OPTION]… SOURCE… DIRECTORY

install [OPTION]… -t DIRECTORY SOURCE…

install [OPTION]… -d DIRECTORY…

-m MODE:指明权限

-o OWNER:指明属主

-g GROUP:指明属组

ldd:查找某命令文件所依赖的共享库

ldd [OPTION]… FILE…

练习:写一个脚本

(1)提示用户输入一个可执行命令名称;

(2)获取此命令所依赖到的所有库文件列表;

(3)复制命令至某目录(例如/mnt/sysroot)下的对应路径下;

(4)复制此命令依赖到的所有库文件至目标目录下的对应路径下;

进一步:每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,并重复完成完成上述功能:直到用户输入quit退出;

#!/bin/bash

#

ch_root=”/mnt/sysroot”

cmdcp() {

if which $1 &> /dev/null;then

    cmd_path=$(which –skip-alias $1)

    cmd_dir=$(dirname ${cmd_path})

    [ -d ${ch_root}${cmd_dir} ] || mkdir -p ${ch_root}${cmd_dir}

    [ -f ${ch_root}${cmd_path} ] || cp ${cmd_path} ${ch_root}${cmd_dir}

    return 0

else

    echo “command not found.”

    return 1

fi

}

libcp() {

    lib_list=$(ldd /usr/bin/bash | grep -o ‘/[^[:space:]]\+’)

    for i in $lib_list;do

        lib_dir=$(dirname $i)

        [ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}

        [ -f ${ch_root}$i ] || cp $i ${ch_root}${lib_dir}

    done

}

read -p “please input a command:” command

until [ $command == “quit” ];do

    if cmdcp $command ;then

        libcp$command

        echo “job $command is finish”

        read -p “please input a command:” command

    else

        read -p “please input a command:” command

    fi

done

资料来源于马哥linux视频教程

相关文章:

bash编程(马哥)

bash基础特性&#xff1a; 命令行展开&#xff1a;~&#xff0c;{} 命令别名&#xff1a;alias&#xff0c;unalias 命令历史&#xff1a;history 命令和路径补全&#xff1a;$PATH glob通配符&#xff1a;*&#xff0c;?&#xff0c;[]&#xff0c;[^]&#xff0c; 快捷键&am…...

搭建Gerrit环境Ubuntu

搭建Gerrit环境 1.安装apache sudo apt-get install apache2 注意:To run Gerrit behind an Apache server using mod_proxy, enable the necessary Apache2 modules: 执行:sudo a2enmod proxy_http 执行:sudo a2enmod ssl 使新的配置生效&#xff0c;需要执行如下命令:serv…...

朋友去华为面试,轻松拿到26K的Offer,羡慕了......

最近有朋友去华为面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…...

springboot项目如何配置启动端口

文章目录0 写在前面1 配置文件(.yaml)--推荐2 配置文件(.properties)3 IDEA配置--不推荐4 写在最后0 写在前面 项目启动需要一个独立的端口&#xff0c;所以在此记录一下。 根据配置文件的后缀书写格式略有不同。 1 配置文件(.yaml)–推荐 若是.yaml后缀的配置文件&#xff0…...

IOS - 抓包通杀篇

IOS中大多数情况&#xff0c;开发者都会使用OC提供的api函数&#xff0c;CFNetworkCopySystemProxySettings来进行代理检测&#xff1b; CFNetworkCopySystemProxySettings 检测函数直接会检测这些ip和端口等&#xff1a; 采用直接附加页面进程&#xff1a; frida -UF -l 通…...

盒子模型的简介

盒子的组成 一个盒子由外到内可以分成四个部分&#xff1a;margin&#xff08;外边距&#xff09;、border&#xff08;边框&#xff09;、padding&#xff08;内边距&#xff09;、content&#xff08;内容&#xff09;。会发现margin、border、padding是css属性&#xff0c;因…...

Kubernetes 101,第二部分,pod

在上一篇文章中,我们了解了Kubernetes 的基础知识以及对其主要架构的介绍。 介绍完毕后,就该探索如何在 Kubernetes 中运行应用程序了。 容器包装器 在 Kubernetes 中,我们无法直接创建单个容器。相反,为了更好,我们可以将容器包装成一个单元,其中包括: 规范:多个容器可…...

protobuf序列化解码原理

Protobuf的编码方式 Varints是一种紧凑表示数字的办法。他用一个或者多个字节表示一个数字&#xff0c;值越小的数字节节数越少。相对与传统的用4字节表示int32类型的数字&#xff0c;Varints对于小于128的数值都可以用一个字节表示&#xff0c;大于128的数值会用更多的字节来表…...

OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。

学习OpenCV的过程中&#xff0c;画图是不可避免的&#xff0c;本篇文章旨在介绍OpenCV中与画图相关的基础函数。 1、画线条——line()函数 介绍&#xff1a; cv2.line(image, start_point, end_point, color, thickness)参数&#xff1a; image: 图像start_point&#xff1a…...

性能平台数据提速之路

作者 | 性能中台团队 导读 性能平台负责MEG所有研发数据的管理、接入、传输、应用等各个环节。数据的提速对于公司报表建设、决策分析、转化策略效果都有至关重要的影响。重点介绍数据生产端与消费端提速落地实践&#xff0c;如何高性价比满足大数据生产端提速&#xff1f;如何…...

Dns域名解析服务器

前言 域名解析服务器的介绍 域名服务器的类型划分 DNS域名解析的过程 为什么需要DNS解析域名为IP地址&#xff1f; 通俗理解Dns DNS劫持 DNS污染 Dns面试经验 前言 DNS是一个应用层协议&#xff0c;用来获取域名对应的IP地址 域名解析服务器的介绍 DNS&#xff08;Dom…...

关于 JavaScript 中的 Promises

在 JavaScript 中&#xff0c;Promise 是一个对象&#xff0c;它表示一个可能还不可用&#xff0c;但会在未来解决的值。Promises 用于处理异步操作&#xff0c;例如发出网络请求或访问数据库&#xff0c;其中结果不是立即可用的。如果你准备好了&#xff0c;我想开始我们的冒险…...

PMP考前冲刺题——错题集

3、 [多选] 采购部门需要向全球不同的供应商采购项目所需的各种商品&#xff0c;所有采购订单均己发送给供应商并已按要求处理。项目经理后来收到客户提出的变更请求。由于项目经理未及时通知采购部门&#xff0c;运抵的所有物品都是按原来的需求所提供。 项目经理本应做什么来…...

【C++】30h速成C++从入门到精通(多态)

多态的概念多态&#xff1a;通俗来说就是多种心态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。多态的定义及实现多态的构成条件多态是在不同继承关系的类对象&#xff0c;去调用同意函数&#xff0c;产生了不同的行为&#xff0…...

从proc文件系统中获取gateway的IP地址

在linux的命令行下获取当前网络环境的gateway的IP并不是一件难事,常用的命令有ip route或者route -n,其实route -n也是通过读取proc文件系统下的文件来从内核获取路由表的,但ip route是通过netlink来获取的路由表;本文将讨论如何编写程序从proc文件系统中获取路由表,并从路…...

【LeetCode】剑指 Offer(17)

目录 题目&#xff1a;剑指 Offer 34. 二叉树中和为某一值的路径 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;剑指 Offer …...

MySQL索引类型

MySQL 是最流行的关系型数据库管理系统&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关系数据库管理系统) 应用软件之一。 索…...

你了解HashMap吗?

一、前言&#xff1a;面试过的人都知道&#xff0c;HashMap是Java程序员在面试中最最最经常被问到的一个点&#xff0c;可以说&#xff0c;不了解HashMap都不好意思说自己是做Java开发的。基本上你去面试十家公司&#xff0c;有七八家都会问到你HashMap。那么今天&#xff0c;就…...

我一个女孩子居然做了十年硬件……

2011年&#xff0c;一个三本大学的电子信息专业的大三女学生跟2个通信专业的大二男生组成了一组代表学校参加2011年“瑞萨杯”全国大学生电子设计大赛&#xff0c;很意外的获得了湖北赛区省三等奖&#xff0c;虽然很意外&#xff0c;但还是挺高兴的&#xff0c;毕竟第一次为喜欢…...

【Linux】编译器gcc g++和调试器gdb的使用

文章目录1.编译器gcc/g1.1C语言程序的翻译过程1.预处理2.编译3.汇编4. 链接1.2 链接方式与函数库1.动态链接与静态链接2.动态库与静态库1.3 gcc与g的使用2.调试器gdb2.1debug和release2.2gdb的安装2.3gdb的使用2.4gdb的常用指令3.总结1.编译器gcc/g 1.1C语言程序的翻译过程 1…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...