diff --git "a/\351\251\254\345\255\220\350\266\212/20240708-\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.md" "b/\351\251\254\345\255\220\350\266\212/20240708-\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..edfe0b872c128087bf5df794fb9e33d5087cfc54 --- /dev/null +++ "b/\351\251\254\345\255\220\350\266\212/20240708-\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.md" @@ -0,0 +1,7 @@ +### 自定义函数,要求随机返回1到30位的英文字符,最少返回一个,最多长度30 + +生成一个随机数,表示字符总长度 rndCount=ceil(random()*30+1) as num 循环 当随机数>0 where rndCount>0 生成一个随机下标,下标长度不超过字符串长度 rndIndex 生成一个随机字符 substr(字符串,rndIndex,截的长度); 拼接到结果 result:=result || 随机字符; 随机数-1 rndCount:=rndCount-1; 返回结果字符串 create or replace function generateRndString() returns text as + +declarecharstext:=′abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789′;resulttext:=′′;rndIndexint;rndCountint;beginrndCount:=(random()∗30+1)::INT;−−raisenotice′WHILErndCount>0LOOPrndIndex:=(random()∗LENGTH(CHARS)+1)::INT;result:=result||substr(chars,rndIndex,1);rndCount:=rndCount−1;ENDLOOP;−−RAISENOTICE′returnresult;end;𝑑𝑒𝑐𝑙𝑎𝑟𝑒𝑐ℎ𝑎𝑟𝑠𝑡𝑒𝑥𝑡:=′𝑎𝑏𝑐𝑑𝑒𝑓𝑔ℎ𝑖𝑗𝑘𝑙𝑚𝑛𝑜𝑝𝑞𝑟𝑠𝑡𝑢𝑣𝑤𝑥𝑦𝑧𝐴𝐵𝐶𝐷𝐸𝐹𝐺𝐻𝐼𝐽𝐾𝐿𝑀𝑁𝑂𝑃𝑄𝑅𝑆𝑇𝑈𝑉𝑊𝑋𝑌𝑍0123456789′;𝑟𝑒𝑠𝑢𝑙𝑡𝑡𝑒𝑥𝑡:=″;𝑟𝑛𝑑𝐼𝑛𝑑𝑒𝑥𝑖𝑛𝑡;𝑟𝑛𝑑𝐶𝑜𝑢𝑛𝑡𝑖𝑛𝑡;𝑏𝑒𝑔𝑖𝑛𝑟𝑛𝑑𝐶𝑜𝑢𝑛𝑡:=(𝑟𝑎𝑛𝑑𝑜𝑚()∗30+1)::𝐼𝑁𝑇;−−𝑟𝑎𝑖𝑠𝑒𝑛𝑜𝑡𝑖𝑐𝑒′𝑊𝐻𝐼𝐿𝐸𝑟𝑛𝑑𝐶𝑜𝑢𝑛𝑡>0𝐿𝑂𝑂𝑃𝑟𝑛𝑑𝐼𝑛𝑑𝑒𝑥:=(𝑟𝑎𝑛𝑑𝑜𝑚()∗𝐿𝐸𝑁𝐺𝑇𝐻(𝐶𝐻𝐴𝑅𝑆)+1)::𝐼𝑁𝑇;𝑟𝑒𝑠𝑢𝑙𝑡:=𝑟𝑒𝑠𝑢𝑙𝑡||𝑠𝑢𝑏𝑠𝑡𝑟(𝑐ℎ𝑎𝑟𝑠,𝑟𝑛𝑑𝐼𝑛𝑑𝑒𝑥,1);𝑟𝑛𝑑𝐶𝑜𝑢𝑛𝑡:=𝑟𝑛𝑑𝐶𝑜𝑢𝑛𝑡−1;𝐸𝑁𝐷𝐿𝑂𝑂𝑃;−−𝑅𝐴𝐼𝑆𝐸𝑁𝑂𝑇𝐼𝐶𝐸′𝑟𝑒𝑡𝑢𝑟𝑛𝑟𝑒𝑠𝑢𝑙𝑡;𝑒𝑛𝑑; + +LANGUAGE plpgsql; \ No newline at end of file diff --git "a/\351\251\254\345\255\220\350\266\212/20240709-\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\350\277\230\345\216\237.md" "b/\351\251\254\345\255\220\350\266\212/20240709-\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\350\277\230\345\216\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..03cccd3f3c2527afaabcdc6b744688869640434b --- /dev/null +++ "b/\351\251\254\345\255\220\350\266\212/20240709-\346\225\260\346\215\256\345\272\223\347\232\204\345\244\207\344\273\275\350\277\230\345\216\237.md" @@ -0,0 +1,34 @@ +### 备份: + +- 完整备份(Full Backup) 完整备份是指对整个数据库进行备份,包括所有数据和表。完整备份是最基本的备份类型,可以独立恢复数据库到某个时间点的状态。 +- 增量备份(Incremental Backup) 增量备份是指备份自上次完整备份或增量备份以来发生变化的数据。增量备份只备份自上次备份以来新增或修改的数据,因此备份文件相对较小,但恢复时需要依次应用完整备份和所有增量备份。 +- 差异备份(Differential Backup) 差异备份是指备份自上次完整备份之后发生变化的数据。与增量备份不同的是,差异备份只备份自上次完整备份以来发生变化的数据,而不是自上次备份以来的所有变化。在恢复时,只需要应用一次完整备份和最近的一次差异备份即可。 + +### mysql备份数据库 + +- 备份:mysqldump -uroot -p 数据库名称 > 备份文件名称.sql + +##### MySQL恢复数据库(mysql命令) + +mysql -u username -P [dbname] < filename.sql username 表示用户名称; dbname 表示数据库名称,该参数是可选参数。如果 filename.sql 文件为 mysqldump 命令创建的包含创建数据库语句的文件,则执行时不需要指定数据库名。如果指定的数据库名不存在将会报错; filename.sql 表示备份文件的名称 + +- 练习:直接在内网服务器上,向windows主机传递文件(PS:要求必须使用SCP命令),掌握清楚scp命令能成功的 +- scp root@目标IP地址:/目录/文件名称 . + +## PostgreSQL + +- 备份:pg_dump -U username -h hostname -p port -W -F p dbname > backup.sql + - `-U username` 是PostgreSQL的用户名。 + - `-h hostname` 是服务器的主机名(可选,如果是在本地可以省略)。 + - `-p port` 是PostgreSQL服务的端口号(可选,默认是5432)。 + - `-W` 表示在执行备份前提示输入密码。 + - `-F p` 指定输出格式为纯文本(默认)。 + - `dbname` 是要备份的数据库名。 + - `backup.sql` 是备份文件的名字。 +- 还原:psql -U username -h hostname -p port -W -d dbname < backup.sql + - `-U username` 是PostgreSQL的用户名。 + - `-h hostname` 是服务器的主机名(可选,如果是在本地可以省略)。 + - `-p port` 是PostgreSQL服务的端口号(可选,默认是5432)。 + - `-W` 表示在执行还原前提示输入密码。 + - `-d dbname` 是要还原到的数据库名。 + - `backup.sql` 是之前备份的文件。 \ No newline at end of file diff --git "a/\351\251\254\345\255\220\350\266\212/20240710-\351\207\215\345\256\232\345\220\221\344\270\216\347\256\241\351\201\223\347\254\246.md" "b/\351\251\254\345\255\220\350\266\212/20240710-\351\207\215\345\256\232\345\220\221\344\270\216\347\256\241\351\201\223\347\254\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..c955c82c24adf866f57eb9853a5eb55bc53f8221 --- /dev/null +++ "b/\351\251\254\345\255\220\350\266\212/20240710-\351\207\215\345\256\232\345\220\221\344\270\216\347\256\241\351\201\223\347\254\246.md" @@ -0,0 +1,205 @@ +# 重定向和管道符 + +- 标准输出 0 + +`命令 > 文件` 将命令的输出写入到文件中 如果文件存在 则覆盖其文件中的内容 +`命令 >> 文件` 将命令的输出追加到文件末尾 如果文件不存在 则创建其文件 + +``` +root@debain:~# cat lxx.txt +LXX -- 原内容 +root@debain:~# echo "Hello, World!" > lxx.txt +root@debain:~# cat lxx.txt +Hello, World! -- 重定向后内容 + +-- 重定向不覆盖追加内容 +root@debain:~# echo "学习重定向" >> lxx.txt +root@debain:~# cat lxx.txt +Hello, World! +学习重定向 +``` + +- 标准输入 1 + +`命令 < 文件` 将文件作为命令的标准输入 +`命令 << 分界符` 从标准输入中读入,直到遇见分界符才停止 +`命令 < 文件1 > 文件2` 将文件1作为命令的标准输入并将标准输出到文件2 + +``` +root@debain:~# cat < result.txt +多读书 多看报 少吃零食 多睡觉 + +root@debain:~# cat > uu.txt << END -- 创建文件可以直接写入文本 +这里是悠悠 +> END -- 输入即退出 + +root@debain:~# date < lxx.txt > result.txt +root@debain:~# cat result.txt +Fri Jul 12 09:16:43 CST 2024 +``` + +- 标准错误 2 + +`命令 2> 文件` 将错误输出重定向到一个文件中(清空原有文件的数据) +`命令 2>> 文件` 将错误输出重定向到一个文件中(追加到原有内容的后面) +`命令 >> 文件 2>& 或 命令 &>> 文件` 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) + +``` +root@debain:~# lxx.txt >& result.txt +root@debain:~# cat result.txt +-bash: lxx.txt: command not found +``` + +- 管道符 + +`|` 可以将多个简单的命令组合起来完成复杂任务 + +``` +root@debain:~# root@debain:~# ls | root -- 以分页显示方式查看当前目录下的内容 +``` + +- 关于有没有echo<这种方式的命令 + +``` +在命令行中,echo 命令通常与重定向操作符一起使用,但是 echo< 这种用法并不是标准的 +echo $(所要显示的内容) +echo `所要显示的内容` +echo "所要显示的内容" +``` + +### for批量创建用户100个用户 + +``` + 1 #!/bin/bash + 2 for i in {1..100}; do + 3 if id "user$i" &>/dev/null; then + 4 echo "user$i exists" + 5 else + 6 echo "user$i does not exist" + 7 fi + 8 done +``` + +### 创建一个存放1-100奇数的数组 + +``` + 1 #!/bin/bash + 2 num=() + 3 + 4 for i in {1..100};do + 5 if((i%2));then + 6 num+=($i) + 7 fi + 8 done + 9 + 10 echo "一到一百的奇数有:" + 11 echo "${num[@]}" +``` + +### 猜数字游戏:开始生成一个100以内的正整数,给10次机会猜数字,如果没有猜对,则提示小了或者大了,如果猜对了,提示恭喜,全部次数用完都没有猜对,则显示“很遗憾” + +``` + 1 #!/bin/bash + 2 + 3 -- 生成一个100以内的随机数 + 4 target=$((RANDOM % 100 + 1)) + 5 + 6 max=10 -- 设置最大尝试次数 + 7 + 8 echo "猜数字游戏 有10次机会猜一个100以内的数字哦" + 9 + 10 for (( i=1; i <= max; i++ )); do + 11 echo "请输入你的猜测(这是第 $i 次尝试):" + 12 read guess + 13 + 14 if ! [[ "$guess" =~ ^[0-9]+$ ]]; then -- 检查是否为数字 + 15 echo "输入无效,请输入一个整数。" + 16 continue + 17 fi + 18 + 19 if [ "$guess" -eq "$target" ]; then -- 比较猜测与目标数字 + 20 echo "恭喜你!你猜对了数字。" + 21 exit 0 + 22 elif [ "$guess" -lt "$target" ]; then + 23 echo "小了!" + 24 else + 25 echo "大了!" + 26 fi + 27 + 28 if [ "$i" -eq "$max" ]; then + 29 echo "很遗憾,你没有在10次尝试内猜对数字。正确的数字是 $target。" + 30 exit 0 + 31 fi + 32 done +``` + +### 显示一张99乘法表 + +``` + 1 #!/bin/bash + 2 for i in $(seq 1 9 ); do + 3 for j in $(seq 1 9); do + 4 printf " %d*%d=%-2d " $i $j $((i*j)) + 5 done + 6 echo "" -- 换行 + 7 done +``` + +### 打印一个等腰三角形 + +``` + #!/bin/bash + + 2 read -p "请输入三角形的高度:" height + 3 + 4 if ! [[ "$height" =~ ^[0-9]+$ ]]; then + 5 echo "输入无效,请输入一个整数" + 6 exit 1 + 7 fi + 8 + 9 for (( i=1; i0; j--)); do + 11 echo -n " " + 12 done + 13 + 14 for (( k=1; k<=(2*i-1); k++ )); do + 15 echo -n "*" + 16 done + 17 echo "" + 18 done + 19 +``` + +### 抽奖游戏,50个人,抽奖,要求抽出5个三等奖、3个二等奖、1个一等奖,要求不能重复,中奖过的人不能重复中奖,结果生成在文件中 + +``` +#!/bin/bash + + people=50 -- 总人数 + prizes=(5 3 1) -- 中奖人数(分别对应三等奖、二等奖、一等奖的人数) + winners=() -- 存储中奖者的数组 + + draw_prizes() { -- draw_prizes函数 + local count=$1 + local prize=$2 + for (( i=0; i result.txt + for winner in "${winners[@]}"; do + echo "编号 $winner" >> result.txt -- 将中奖结果存入文件中 + done +``` \ No newline at end of file diff --git "a/\351\251\254\345\255\220\350\266\212/20240711-shell\347\274\226\347\250\2131.md" "b/\351\251\254\345\255\220\350\266\212/20240711-shell\347\274\226\347\250\2131.md" new file mode 100644 index 0000000000000000000000000000000000000000..8bbb922cdf5a5f72222558c6a4e31f1a8a234a2e --- /dev/null +++ "b/\351\251\254\345\255\220\350\266\212/20240711-shell\347\274\226\347\250\2131.md" @@ -0,0 +1,83 @@ +## Shell既是一种命令语言,又是一种程序设计语言 + +## shell脚本编程如同其他编程语言的一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以运行了,而linux下的shell种类众多,常用的用:`Bourne Again Shell(/bin/bash)` + +- shell脚本编写如下,并将其保存为test.sh,进入存放此文件目录 + +``` +#!/bin/bash +echo "Hello World" +``` + +- 当作为可执行程序运行时候 + +``` +chmod +x test.sh # 赋予可执行权限 +./test.sh # 执行程序 +``` + +- 简单尝试 + +``` + 1 # ! /bin/bash` + 2 # 注释 + 3 + 4 :< greater thanl的缩写,表大于 [ $a -gt $b ] 返回 false +-ge >= greater equal的缩写,表大于等于 [ $a -ge $b ] 返回 false +-lt < greater equal的缩写,表小于 [ $a -lt $b ] 返回 true +-le <= greater equal的缩写,表小于等于 [ $a -lq $b ] 返回 true +``` + +### 布尔运算符 + +``` +-a 与运算,两个表达式都为true,才返回true [ $a -lt 20 -a $b -gt 20 ] 返回true +-o 或运算,有一个表达式都为true,则返回true [ $a -lt 20 -o $b -gt 100 ] 返回true +! 非运算,表达式为true,则返回false [ ! false ] 返回true +``` + +### 逻辑运算符 + +``` +&& && 和 -a是两种不同的逻辑运算符,用于连接和执行多个命令 +|| 第一个条件执行成功后,再执行第二条,,任何一个条件失败,表达式直接返回false +``` + +### 字符串运算符 + +``` += 检测两个字符串是否相等 相等则返回true +!= 检测两个字符串是否相等 不相等则返回true +-z 检测字符串长度是否为0 为0则返回true +-n 检测字符串长度是否为0 不为0则返回true +str 检测字符串是否为null 不为null则返回true +``` \ No newline at end of file