From 8df99589d004942fefd05cbbb7a7c15b949796c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=8B=8F=E8=90=8Cm?= <3279471564@qq.com> Date: Wed, 10 Jul 2024 08:24:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...75\345\217\212\347\224\250\346\263\225.md" | 169 ++++++++++++++++++ ...75\344\270\216\346\201\242\345\244\215.md" | 110 ++++++++++++ ...06_postgresql\345\257\274\345\205\245.png" | Bin 0 -> 34978 bytes 3 files changed, 279 insertions(+) rename "42 \345\210\230\350\213\217\350\220\214/20240704_postgresql\344\270\213\350\275\275.md" => "42 \345\210\230\350\213\217\350\220\214/20240706_postgresql\344\270\213\350\275\275\345\217\212\347\224\250\346\263\225.md" (45%) create mode 100644 "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" create mode 100644 "42 \345\210\230\350\213\217\350\220\214/img/20240706_postgresql\345\257\274\345\205\245.png" 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\345\217\212\347\224\250\346\263\225.md" similarity index 45% 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\345\217\212\347\224\250\346\263\225.md" index dc1cf8c..2f88cb7 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\345\217\212\347\224\250\346\263\225.md" @@ -116,4 +116,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 0000000..b0fcf08 --- /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/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 GIT binary patch literal 34978 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
y9)lrvSn-F7OAX#RNJr^|Jy*EWx1DH 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

j5gb^5C-tFQLUEl9+~iWg6fFYh0@)kBCXUSOX| zhf|}Ev|C2=Ca?Qp@6@xEh;#mc)-?QbZ%?hFg`@KmSbObl#Zog#`F?$NQqGf%Di@#m z1#kPu(2~DH%LnaG*r4v%`(njXhN?bome_33cOoS$9Tudtm-m{X=^XswDoegjvKsOf zI=>St_x~0-I!~@S{X4c?V?OZ%kH6<<%+95(hn^US2@UBZSFOB zGcb2;9{(L(&iw5bm6x~J!A^O}cCL^orMp4gb?n64&;nPFCx3=k0vTGnM{Erfk```? z(O82>`tJ~7HkK;WlI^Sr7F?FS(tGmJqebRfA^?AVYNE!QnS50#l%_RMz?XusK0oW# zEA2Yc>^hi+mz&KA^T=1tix~504qi2!?(0nbc8#@?(ZW#`&TQFdjxq31FH;jGlzsIN zg(yo1^ve@dXu0X~&Q4`*f$Ry%K-Bb;A2=t0ve(p|LgxrqQ`V?rv$A-tfsD#Twz{rE zrYCnr!oqzDb}{&NCIjKqABjTlhk;`c4}|PF}zbV41MY;hpEeQ;vAPw;t@DjoDoNpco-W z|FDt;@uUd>Boo>Wu-Bp)&fuaKp1@)wa8P2bMWw`RYh|8|4GzM6rf40kdZZEO2L9^N%$3Uj8>ZaFwd zwpX5ZTQ$TwKUbF-TRqL)GP`6C^L{+#^$2!)t4MBrb_0tHr(VOLmPM@r@@*oq`7MDq>dfWGFRiI4v zU%O&5fA5O1Qic+qm)Dfgz>Y^S(T)T1ch8pKASUbozCUZjb;p1W3lZ{7Y3yWTO1T#~ zt%@@yzsrbH$LVvHkD)9#FtmQSk#>^(AKPL?XDt4=anWxz_tI7K8;V>uRT5xyjSmeS zu$W&KTnQu5+n*PPuC3Zh z&|U;%4AptqT2d(g`Hor9!Rk3)^4UoHRF#+1-~5a_9fcma(=FYS0JN=*u&pC~y=^4gT->4t-?1!|6Iq{bN$EqsPrpf|QDDCxl~UmSf4 zoCb3sssnh@wgxm%B$Vuq75<@^Mfz-cPkpo{Xd%U?>atrF<;I zhD%ON^EHp~GqbM99c<}RX_w=7?k)c_FE;6!w%(@ve1WRpiq-i0#FJ3njTRfn!!gjC zzBVf0^wDx^B(4}%o`ZH}9XmZ@%Rk*ktvGlW*Ck7v}A_lw>Fn=r4LGe-<7T>NbX zB@RN!Yjag669KTaw3K6)+`=r$>_F!ZKYi+tuX4ynj?wSGwz>*CH2lbAeuIz0?t-Cq q5a|45yJ?~~3w|!=N~^;-JI9y3ZucR?+vpPTPvV)((}E|jJ^v4r4yfk< literal 0 HcmV?d00001 -- Gitee From 6da14f36b2d43e9e09ed599b3a0c6157e107d40d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=8B=8F=E8=90=8Cm?= <3279471564@qq.com> Date: Sat, 13 Jul 2024 11:20:50 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...75\345\217\212\347\224\250\346\263\225.md" | 11 + ...QL\346\205\242\346\237\245\350\257\242.md" | 128 +++++++ ...32\346\234\254\345\205\245\351\227\250.md" | 312 ++++++++++++++++++ ...25\345\217\212\350\257\255\345\217\245.md" | 138 ++++++++ 4 files changed, 589 insertions(+) rename "42 \345\210\230\350\213\217\350\220\214/20240706_postgresql\344\270\213\350\275\275\345\217\212\347\224\250\346\263\225.md" => "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" (92%) create mode 100644 "42 \345\210\230\350\213\217\350\220\214/20240710_MySQL\346\205\242\346\237\245\350\257\242.md" create mode 100644 "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" create mode 100644 "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" diff --git "a/42 \345\210\230\350\213\217\350\220\214/20240706_postgresql\344\270\213\350\275\275\345\217\212\347\224\250\346\263\225.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 92% rename from "42 \345\210\230\350\213\217\350\220\214/20240706_postgresql\344\270\213\350\275\275\345\217\212\347\224\250\346\263\225.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 2f88cb7..46f5c86 100644 --- "a/42 \345\210\230\350\213\217\350\220\214/20240706_postgresql\344\270\213\350\275\275\345\217\212\347\224\250\346\263\225.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) 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 0000000..913038b --- /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 0000000..c4c6b7c --- /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 0000000..9307293 --- /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 -- Gitee