diff --git "a/42 \345\210\230\350\213\217\350\220\214/20240704_postgresql\344\270\213\350\275\275.md" "b/42 \345\210\230\350\213\217\350\220\214/20240706_postgresql\344\270\213\350\275\275\343\200\201\345\215\270\350\275\275\345\217\212\347\224\250\346\263\225.md" similarity index 41% rename from "42 \345\210\230\350\213\217\350\220\214/20240704_postgresql\344\270\213\350\275\275.md" rename to "42 \345\210\230\350\213\217\350\220\214/20240706_postgresql\344\270\213\350\275\275\343\200\201\345\215\270\350\275\275\345\217\212\347\224\250\346\263\225.md" index dc1cf8c1989ebaf0b01dbefb2a3579a283a7df79..46f5c86d0d33ab3b6ba8ecf4ca54020f5e8d3ee5 100644 --- "a/42 \345\210\230\350\213\217\350\220\214/20240704_postgresql\344\270\213\350\275\275.md" +++ "b/42 \345\210\230\350\213\217\350\220\214/20240706_postgresql\344\270\213\350\275\275\343\200\201\345\215\270\350\275\275\345\217\212\347\224\250\346\263\225.md" @@ -34,6 +34,17 @@ #显示active就是已开启了 ``` +##### 干净卸载方法: + +```bash +apt --purge remove postgreql #卸载指定的包并且删除与该包相关的配置文件 +apt autoremove postgresql #清理系统中不必要的软件包,以释放磁盘空间并确保系统保持干净整洁 +find / -name postgre* #查找postgre*的所有文件 +find / -name postgre* -exec rm -rf {} \; #查找postgre*的所有文件并删除 +``` + + + #### postgresql16配置远程登录访问 1. 修改`postgresql.conf`(版本:16) @@ -116,4 +127,173 @@ #根据提示输入刚刚设置的密码 ``` +#### 导入 + +1. 导入数据 + + ```sql + # psql -h ip地址 -U 用户名 -f 导入的数据位置 + psql -h 47.120.33.3 -U postgres -f /home/mysql_test.sql + ``` + +2. 修改文件(将use改成/c) + + ![20240706_postgresql导入](./img/20240706_postgresql导入.png) + +3. 再重新执行第一条命令 + +4. 登录postgresql,查看数据库 + + ```sql + \l + ``` + +5. 查看数据表 + + ```sql + \dt + ``` + + + +#### 登录及创建 + +1. 远程登录 + + ```bash + psql -U postgres -h ip地址 + ``` + + - 本地登录(不需要输入密码) + + ```bash + su postgre #进入postgre用户 + psql #进入sql数据库 + ``` + + - 连接数据库时切换到指定用户和库 + + ```sql + psql -U 用户名 -d 库名 + #根据提示输入密码即可 + ``` + +2. 修改密码 + + ```sql + \password [USERNAME] + #根据提示设置新密码 + ``` + +2. 创建数据库 + + ```sql + creat database 库名; + ``` + +3. 删除数据库: + + ```sql + drop database 库名; + ``` + +4. 列举数据库,相当于mysql的show databases + + ```sql + \l # list + ``` + +5. 切换数据库,相当于mysql的use dbname + + ```sql + \c 库名 # change + ``` + +6. 创建数据表 + + ```sql + create table 表名 ( + id serial primary key, -- 自增主键 + name varchar(50) not null, -- 非空名字字段 + email varchar(100) unique -- 邮箱字段,保证唯一性 + ); + #serial 用于自动生成整数类型的主键 + #unique 唯一 + ``` + +7. 插入数据 + + ```sql + insert into 表名 (字段1, 字段2, 字段3) VALUES (值1, 值2, 值3); + ``` + +8. 重命名一个表 + + ```sql + alter table 表名A rename to 表名B; + ``` + +9. 删除一个表 + + ```sql + drop table 表名; + ``` + +10. 列举表,相当于mysql的show tables + + ```bash + \dt #或者\desc table + ``` + +##### 关于表的操作 + +1. 在已有的表里添加字段: + + ```sql + alter table 表名 add column 字段名 字段类型; + ``` + +2. 删除表中的字段: + + ```sql + alter table 表名 drop column 字段名; + ``` + +3. 重命名一个字段: + + ```sql + alter table 表名 rename column 字段名A to 字段名B; + ``` + +4. 给一个字段设置缺省值: + + ```sql + alter table 表名 alter column 字段名 set default 新的默认值; + ``` + +5. 去除缺省值: + + ```sql + alter table 表名 alter column 字段名 drop default; + ``` + +6. 修改表中的某行某列的数据: + + ```sql + update 表名 set 目标字段名=目标值 where 该行特征(条件); + ``` + +7. 删除表中某行数据: + + ```sql + delete from 表名 where 该行特征(条件); + delete from 表名; --删空整个表 + ``` + +8. 退出 + + ```sql + \q + ``` + \ No newline at end of file diff --git "a/42 \345\210\230\350\213\217\350\220\214/20240709_postgresql\346\225\260\346\215\256\347\232\204\345\244\207\344\273\275\344\270\216\346\201\242\345\244\215.md" "b/42 \345\210\230\350\213\217\350\220\214/20240709_postgresql\346\225\260\346\215\256\347\232\204\345\244\207\344\273\275\344\270\216\346\201\242\345\244\215.md" new file mode 100644 index 0000000000000000000000000000000000000000..b0fcf08b5067dad986ca547f690e655fec5d4754 --- /dev/null +++ "b/42 \345\210\230\350\213\217\350\220\214/20240709_postgresql\346\225\260\346\215\256\347\232\204\345\244\207\344\273\275\344\270\216\346\201\242\345\244\215.md" @@ -0,0 +1,110 @@ +### postgresql备份与恢复 + +##### 备份 + +1. 备份单个数据库 + + ```sql + pg_dump -U 用户名 -d 库名 -f 要存放备份文件的位置.sql + pg_dump -U 用户名 -d 库名 > 要存放备份文件的位置.sql + + pg_dump -U 用户名 -Fc 库名 > 存放备份文件的位置.dump # 用pg_restore来恢复 + pg_dump -U postgres -Fc test > /tmp/post_test.dump + + ``` + +2. 备份所有数据库 + + ```sql + pg_dumpall -U > 要存放备份文件的位置.sql + ``` + + + +3. 备份一个表 + + ```sql + pg_dump -U 用户名 -d 库名 -t 表名1 > 存放备份表的位置.sql + ``` + + + +4. 备份多个表 + + ```sql + pg_dump -U 用户名 -d 库名 -t 表名1 -t 表2 > 存放备份表的位置.sql + #有几个表就写几个 -t 表名 + ``` + + + +##### 恢复 + +1. 恢复文件 + + - 在root中执行 + + ```sql + psql -U 用户名 -h IP地址 -p 5432 -d 要恢复的库名 -f 存放备份文件的位置.sql + psql -U 用户名 -h IP地址 -p 5432 -d 要恢复的库名 < 存放备份文件的位置.sql + ``` + + - 在postgres用户中执行 + + ```sql + su postgres + psql -h IP地址 -U postgres -d 要恢复的数据库名 -f 存放备份文件的位置.sql + psql -h IP地址 -U postgres -d 要恢复的数据库名 < 存放备份文件的位置.sql + ``` + +​ + +##### 压缩 + +1. 压缩备份单个库 + + ```sql + pg_dump -U 用户名 -d 库名 | gzip > 存放备份文件的位置.sql.gz + ``` + + + +2. 压缩备份所有 + + ```sql + pg_dumpall | gzip > 存放备份文件的位置.sql.gz + ``` + + + +3. 压缩备份单个数据 + + ```sql + pg_dump -U 用户名 -d 库名 -t 表1 | gzip > 存放备份文件的位置.sql.gz + pg_dump -U postgres -d test -t teacher -t student | gzip > /tmp/ts.sql.gz + ``` + +4. 压缩备份多个数据 + + ```sql + pg_dump -U 用户名 -d 库名 -t 表1 -t 表2 | gzip > 存放备份文件的位置.sql.gz + ``` + + + +##### 解压缩恢复 + +1. 压缩恢复单个数据库 + + ```sql + gunzip < 存放备份文件的位置.sql.gz | psql -h ip地址 -U 用户名 -d 库名 + gunzip < /tmp/ts.sql.gz | psql -h 192.168.178.133 -U postgres -d test + ``` + +2. 压缩恢复所有 + + ```sql + gunzip < 存放备份文件的位置.sql.gz | psql + ``` + + \ No newline at end of file diff --git "a/42 \345\210\230\350\213\217\350\220\214/20240710_MySQL\346\205\242\346\237\245\350\257\242.md" "b/42 \345\210\230\350\213\217\350\220\214/20240710_MySQL\346\205\242\346\237\245\350\257\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..913038b5f5d5094ffc2ad929018e664b87c36a7e --- /dev/null +++ "b/42 \345\210\230\350\213\217\350\220\214/20240710_MySQL\346\205\242\346\237\245\350\257\242.md" @@ -0,0 +1,128 @@ +## 慢查询日志(定位慢sql) + +MySQL的慢查询日志是MySQL提供的一种日志记录,它**用来记录在MySQL中响应时间超过阈值的语句**,具体指运行时间超过`long_query_time`值的SQL,则会被记录到慢查询日志中。 + +- `long_query_time`的默认值为10,意思是运行10秒以上的语句 +- 由慢查询日志来查看哪些SQL超出了我们的最大忍耐时间值,比如一条SQL执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒钟的SQL,结合之前`explain`进行全面分析 +- MySQL数据库没有开启慢查询日志,**需要手动设置这个参数** + +##### 查看慢查询日志是否开以及如何开启 + +- 查看慢查询日志是否开启 + + ```bash + SHOW VARIABLES LIKE '%slow_query_log%'; + ``` + +- 开启慢查询日志: + + ```bash + SET GLOBAL slow_query_log = 1; + ``` + + **使用该方法开启MySQL的慢查询日志只对当前数据库生效,如果MySQL重启后会失效。** + +- 示例: + + ```sql + -- 指定数据库 + mysql> use advanced_mysql_learning; + Database changed + + -- 查看慢查询日志是否开启 + mysql> SHOW VARIABLES LIKE '%slow_query_log%'; + +---------------------+---------------------------------------------------------------------------+ + | Variable_name | Value | + +---------------------+---------------------------------------------------------------------------+ + | slow_query_log | OFF | + | slow_query_log_file | D:\Development\Sql\Mysql\mysql8\exe\mysql-8.0.27-winx64\data\dam-slow.log | + +---------------------+---------------------------------------------------------------------------+ + 2 rows in set, 1 warning (0.00 sec) + + -- 开启慢查询日志 + mysql> SET GLOBAL slow_query_log = 1; + Query OK, 0 rows affected (0.01 sec) + + ``` + + ##### 永久开启慢查询 + + 如果要使慢查询日志永久开启(不推荐,浪费性能),需要修改`my.cnf`文件,在`[mysqld]`下增加修改参数。 + + ```bash + # my.cnf + [mysqld] + # 开启慢查询 + slow_query_log=ON + # 指定存储慢查询日志的文件。如果这个文件不存在,会自动创建 + slow_query_log_file=/var/lib/mysql/slow.log + + ``` + + #### 设置慢SQL的时间阈值 + + ##### 查看阈值 + + - 时间阈值是由参数`long_query_time`控制的,默认情况下`long_query_time`的值为10秒。 + + - MySQL中查看`long_query_time`的时间:`SHOW VARIABLES LIKE 'long_query_time%';`。 + + ```sql + mysql> SHOW VARIABLES LIKE 'long_query_time%'; + +-----------------+-----------+ + | Variable_name | Value | + +-----------------+-----------+ + | long_query_time | 10.000000 | + +-----------------+-----------+ + 1 row in set, 1 warning (0.00 sec) + #注意:是超过阈值才会被记录,等于不会被记录 + + ``` + + ##### 设置阈值 + + ```sql + -- 设置阈值 + mysql> set global long_query_time=3; + Query OK, 0 rows affected (0.00 sec) + + -- 可以发现设置没有成功 + mysql> SHOW VARIABLES LIKE 'long_query_time%'; + +-----------------+-----------+ + | Variable_name | Value | + +-----------------+-----------+ + | long_query_time | 10.000000 | + +-----------------+-----------+ + 1 row in set, 1 warning (0.00 sec) + + ``` + + - 也可以直接在my.cnf配置文件中修改 + + ```bash + [mysqld] + long_query_time=1 + ``` + + + + - 查看设置的阈值(重启一个连接查看也可以) + + ```sql + show global variables like 'long_query_time'; + ``` + + - 查询慢查询日志文件中的总记录条数 + + ```bash + mysql> SHOW GLOBAL STATUS LIKE '%Slow_queries%'; + +---------------+-------+ + | Variable_name | Value | + +---------------+-------+ + | Slow_queries | 0 | + +---------------+-------+ + 1 row in set (0.00 sec) + + ``` + +详情示例看:https://blog.csdn.net/laodanqiu/article/details/131423834 \ No newline at end of file diff --git "a/42 \345\210\230\350\213\217\350\220\214/20240711_shell\350\204\232\346\234\254\345\205\245\351\227\250.md" "b/42 \345\210\230\350\213\217\350\220\214/20240711_shell\350\204\232\346\234\254\345\205\245\351\227\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..c4c6b7ca8a64850ec3533014955e1e23d454fb75 --- /dev/null +++ "b/42 \345\210\230\350\213\217\350\220\214/20240711_shell\350\204\232\346\234\254\345\205\245\351\227\250.md" @@ -0,0 +1,312 @@ +## 一、SHELL + +### (一)什么是shell + +Shell是一个命令的解释器,它在操作系统的最外层,负责直接将与用户进行对话,把用户输入的命令给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。 + +使用SHELL的对话方式: + +1. 交互式(Interactive):用户输入一条命令,Shell 解释并执行一条。 +2. 非交互式,又叫批处理(Batch):用户事先编写一个 Shell 脚本(Script)文件,其中包含诸多命令,Shel1 会一次执行完所有命令。 + +查看当前系统支持哪些类型的shell : cat /etc/shells + + + +### (二)什么是shell脚本 + +shell脚本:就是把原来的Linux语句或命令放在一个文件中,然后通过这个程序文件去执行时,我们就说这个程序为shell脚本或shell程序,我们可以在脚本中输入一系统命令以及相关语法语句组合。 + +Shell 脚本需要用到很多的 Linux 命令以及结合之前学习过的正则表达法、管道符,重定向等语法规则来完成指定任务。把它们有机结合起来形成了一个功能强大的shell脚本。 + +#### 1.shell脚本的基本格式 + +首先来创建一个基础的脚本 + +```bash +root@class3:~# vim t.sh +#!/bin/bash +# 第一行开头"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行。 +# #!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect +# this is shell +# 第二行为注释内容,以#开头为注释信息,执行时被忽略。可以写一些shell脚本的介绍 +echo "hello world" +mkdir /opt/test +touch /opt/test/a.txt +ls -l /opt +#第3+行为执行语句或命令 +``` + +shell脚本文件一般以.sh结尾 + +那么如何去执行呢? + +#### 2.执行SHELL脚本的三种方式 + +1. 脚本路径执行:可以是绝对路径,也可以是相对路径。需要权限 + + ```bash + root@class3:~# /root/t.sh #绝对路径 + root@class3:~# ./t.sh #相对路径 + # 需要权限 + root@class3:~# chmod +x t.sh + ``` + +2. shell解释器执行:指定使用bash去执行,不需要权限 + + ```bash + root@class3:~#bash t.sh + ``` + +3. source或.:也可以直接执行,不需要权限,但是会影响当前环境 + + ```bash + root@class3:~#source t.sh + root@class3:~#. t.sh + ``` + + | 执行方式 | 是否需要权限 | 是否影响当前环境 | + | :-------------- | :----------: | :--------------: | + | 脚本路径执行 | yes | no | + | shell解释器执行 | no | no | + | source或. | no | yes | + + 因为路径和shell解释器形式,其实是开一个子进程,在子进程中执行脚本,所以不会影响到原来的环境 + +#### 3.shell脚本执行逻辑 + +1. 顺序执行:程序按从上到下顺序执行 +2. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行 if +3. 循环执行:程序执行过程中需要重复执行多次某段语句 while for + + + +### (三)脚本错误调试 bash -x -n + +#### 1.命令错误 + +默认后续的命令还会继续执行,可以使用 bash -x 进行观察 + +```bash +root@class1:~# cat tt.sh +#!/bin/bash +echo 111 +eho 222 +echo 333 + +root@class1:~# bash -x tt.sh ++ echo 111 +111 ++ eho 222 +tt.sh: 行 3: eho: 未找到命令 # 检测到错误 ++ echo 333 +333 +``` + +#### 2.语法错误 + +会导致后续的命令不继续执行,可以用bash -n 检查错误,但是提示的出错行数可能会因为嵌套结构而显得不准确 + +```bash +root@class1:~# cat tt.sh +#!/bin/bash +echo 111 +eho 666 +if +echo 777 + + +root@class1:~# bash -x tt.sh # 可能发现所有错误 ++ echo 111 +111 ++ eho 666 +tt.sh: 行 3: eho: 未找到命令 +tt.sh: 行 6: 语法错误:未预期的文件结束符 +root@class1:~# bash -n tt.sh # 只能发现语法错误 +tt.sh: 行 6: 语法错误:未预期的文件结束符 +``` + +## 二、变量 + +**自定义变量 语法为** : 变量名=变量值 + +- =号两边不能有空格 +- 变量名称**不能以数字开头** +- 字符串加引号 +- 变量名前加$,表示使用变量的值 + +```bash +root@class1:~#myage=18 # 注意没有空格 +``` + +**交互式定义变量 :** read -p + +语法 : read p "提示语" 变量名 + +```bash +# 语法 : read p "提示语" 变量名 +root@class1:~# read -p "请输入一个日期" date +请输入一个日期666 +date=666 +root@class1:~# echo $date +666 + +``` + +#### **只读变量** + +只读变量在声明后不能更改其值。在Bash shell中,通过readonly 命令来声明位置变量 + +```bash +root@class1:~# readonly name=张三 +root@class1:~# echo $name +张三 +root@class1:~# name=李四 +-bash: name: 只读变量 +# 一旦建立后,无法进行追加和删除 +root@class1:~# unset name +-bash: unset: name: 无法取消设定:只读variable +``` + +#### **预定义变量** + +预定义变量是Shell在启动时就已经存在的变量,它们由系统自动初始化,并且具有特定含义和用途。例如 + +```bash +$HOME #当前用户的家目录路径。 +$USER 或 $LOGNAME #当前用户的用户名。 +$PATH #用于查找可执行文件的路径列表。 +$PWD #当前工作目录(Present Working Directory) +# 可以同过env命令进行查看当前系统有哪预定义变量 +``` + +#### **环境变量** + +环境变量是一种特殊的预定义变量,不仅在当前Shell会话中可用,还会被所有子进程继承。 + +在当前shell环境中定义的变量是无法自动被其它子进程继承的,需要通过export命令去赋予 + +#### **位置变量** + +指的是从命令行传递给脚本或函数的参数。每个参数都有一个编号,从 $0 开始,其中 $0 是脚本本身的名字,而 $1、$2、$3 等依次对应第一个、第二个、第三个参数等。 + +```bash +#!/bin/bash +echo "脚本的文件名 $0" #会打印出脚本的文件名 +echo "$1" #脚本后面的第一个参数 +echo "$2" #脚本后面的第二个参数 +echo "$3" #脚本后面的第三个参数 +echo "${10}" #脚本后面的第十个参数 + +#①:$0是一个特殊变量,它代表脚本的文件名 +#②:${10}必须用大括号括起来,否则将$看成变量,在后面加0 +#$# 参数的个数 + +!/bin/bash + 将脚本接收的第一个参数赋值给FILE变量 +read -p "请输入你要删除的文件名: " FILE +if [ $0 = $FILE ];then exit; +else + read -p "你是否真的要删除$FILE :" YN +if [ $YN = 'y' ] + then rm $FILE; echo "已删除$FILE" +else + echo "已取消删除" +fi +fi + +echo "程序退出" + + +``` + +### 特殊变量与符号 + +#### 1.符号 + +在变量中,有一些特殊符号,需要我们去掌握 + +| 符号 | 名称 | 作用 | +| ------------------------------------------------------------ | ------ | ---------------------------------------- | +| " " | 双引号 | 弱引用 可以识别变量 "$name",将变量转成值 | +| ‘ ’ | 单引号 | 强引用 不能识别变量 '$name',不变值 | +| { } | 大括号 | 定义变量名的范围 ${dizhi}30 | +| \`` | 反撇 | 调用命令的执行结果 ,另一种写法$( 命令 ) \`命令` | | | + +#### 2.特殊变量 + +在预定义变量中,还存在一些特殊变量,比如在之前说到的$0就是一种特殊变量 + +| $* | 代表一个整体,把所有位置参数当成整体返回,所有参数 | +| ---- | ---------------------------------------------------------- | +| $@ | 代表独立个体,把所有位置参数当成个体返回,查询与上面的区别 | +| $? | 上一条命令的执行结果是否成功。正确为0,返回任何非0值为异常 | +| $# | 代表位置参数个数 | +| $0 | 代表当前脚本的名称 | +| $$ | 当前bash的pid | + + + +### (四)四则运算 + +加法 + + +减法 - + +乘法 \ * :*表示乘。但是因为其有特殊含义,需要加上\转义符进行转义,表达原本的意思 + +除法 / + +#### 1.expr运算 + +基本格式为:expr 变量 + 变量 (注意空格) + +```bash +expr $a+$b # 错误 +expr $a + $b +sum=$(expr $a + $b) +``` + +#### 2.使用(())运算 + +将变量a与b相加,格式为 :(( 变量名=算数表达式 )) + +```bash +(( sum=a + b )) +echo $sum +#()内可以直接调用变量,不需要加$符号 +``` + +#### 3.使用let运算 + +格式为 let 运算结果变量名=运算表达式 + +``` +let sum=$a + $b; +``` + +#### 4.方括号[ ]运算 + +语法为:运算结果变量名=$[算术表达式] + +```bash +a=1 +b=2 +sum=$[a+b] +echo $sum +``` + + + +尝试用脚本来实现一些运维的工作: + +1. 用脚本去自动备份数据库 +2. 用脚本去安装nginx, + + + +# Shell相关文档 + +https://blog.csdn.net/hy199707/article/details/135820345 + +https://www.runoob.com/linux/linux-shell.html \ No newline at end of file diff --git "a/42 \345\210\230\350\213\217\350\220\214/20240712_shell\344\270\255\347\232\204\346\265\213\350\257\225\345\217\212\350\257\255\345\217\245.md" "b/42 \345\210\230\350\213\217\350\220\214/20240712_shell\344\270\255\347\232\204\346\265\213\350\257\225\345\217\212\350\257\255\345\217\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..93072930396d78195ab750e521da1799bbedc07d --- /dev/null +++ "b/42 \345\210\230\350\213\217\350\220\214/20240712_shell\344\270\255\347\232\204\346\265\213\350\257\225\345\217\212\350\257\255\345\217\245.md" @@ -0,0 +1,138 @@ +### Shell中的测试及语句 + +#### 一:简单条件测试 + +1. 语法:[ 操作符 文件/目录 ] +2. 常用操作符 + +| -d | 测试是否为目录(Directory) | +| ---- | ------------------------------- | +| -e | 测试目录或文件是否存在(Exist) | +| -f | 测试是否为文件(File) | + +3. 测试后用$? 进行检测是否正确 + +#### 二:逻辑测试 + +1. 语法:[ 表达式1 ] 操作符 [ 表达式2 ] 或者 命令1 操作符 命令2 + +2. 常用操作符 + + | && | 逻辑的与,"而且"的意思。 前面命令成功才会执行后面命令 | + | ---- | ------------------------------------------------------------ | + | \|\| | 逻辑的或,"或者"的意思。 第一个成功,不会执行第二个,第一个失败,第二个成功 | + | ! | 逻辑的否。 | + +#### 三:整数比较 + +1. 语法:[ 整数 操作符 整数 ] + +2. 常用操作符 + + | -eq | 判断是否等于 | + | ---- | ------------------ | + | -ne | 判断是否不等于 | + | -gt | 判断是否大于 | + | -lt | 判断是否小于 | + | -le | 判断是否等于或小于 | + | -ge | 判断是否大于或等于 | + +#### 四:字符串比较 + +1. 语法:[字符串1 操作符 字符串2] + +2. 常用操作符 + + | = | 比较字符串内容是否相同。 | + | ---- | ------------------------ | + | != | 比较字符串内容是否不同。 | + | z | 判断字符串内容是否为空。 | + +#### 五:条件测试语句 + +1. #### if 条件语句 + + - 单分支结构 + + ```bash + 1|if [判断条件];then + 2|需要执行的命令 + 3|fi + ``` + + - 双分支结构 + + ```bash + 1|if [判断条件];then + 2|需要执行的命令 + 3|else + 4|条件不成立时需要执行的命令 + 5|fi + ``` + + - 多分支结构 + + ```bash + 1|if [判断条件1];then + + 2|命令序列1 + + 3|elif [判断条件2];then + + 4|命令序列2 + + 5|elif 判断条件3;then + + 6|命令序列3 + + 7|else + + 8|以上条件都为假的命令序列 #托底命令 + + 9|fi + ``` + + + +2. #### case条件语句 + + ```bash + 1 case $变量名 in + 2 模式1) # 判断条件 + 3 命令1... # 判断为该模式后需要执行的命令 + 4 ;; + 5 模式2) + 6 命令2... + 7 ;; + 8 模式3|模式4) # 可以用'|'分隔多个模式进行联合匹配 + 9 命令3... + 10 ;; + 11 *) + 12 default_commands... # 匹配所有未明确列出的其他情况(可选) + 13 ;; + 14 esac # 内容的结尾格式,与if语句中的fi类似 + ``` + + + +3. #### 循环语句 + + - for 语句 + + ```bash + 1 for 变量名 in 取值列表 ;do + 2 命令序列 + 3 done + ``` + + - while语句 + + ```bash + while 判断条件 + do + 命令1 + done + #语法与if相似 + ``` + + \ No newline at end of file diff --git "a/42 \345\210\230\350\213\217\350\220\214/img/20240706_postgresql\345\257\274\345\205\245.png" "b/42 \345\210\230\350\213\217\350\220\214/img/20240706_postgresql\345\257\274\345\205\245.png" new file mode 100644 index 0000000000000000000000000000000000000000..3dc9d1ad38102263acc06907a25f3f2fb1bfeb3f Binary files /dev/null and "b/42 \345\210\230\350\213\217\350\220\214/img/20240706_postgresql\345\257\274\345\205\245.png" differ