From 0e83c7dea1be0237379b58d7cb49af22b7d86f7c Mon Sep 17 00:00:00 2001 From: lxx <3099029007@qq.com> Date: Sun, 14 Jul 2024 22:26:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\234\272\345\256\211\350\243\205Debian.md" | 23 +-- ...16\350\246\201\345\201\232\347\232\204.md" | 2 +- ...15\345\212\241\347\256\241\347\220\206.md" | 2 +- ...70\345\205\263\351\205\215\347\275\256.md" | 2 + ...70\345\205\263\351\205\215\347\275\256.md" | 28 ++- .../20240705-\346\265\213\350\257\225.md" | 71 ++++++- ...345\205\245sql\346\226\207\344\273\266.md" | 37 ++++ ...07\344\273\275\350\277\230\345\216\237.md" | 58 ++++++ ...14\347\256\241\351\201\223\347\254\246.md" | 194 ++++++++++++++++++ ...ll\347\274\226\347\250\213\344\270\200.md" | 75 +++++++ ...ll\347\274\226\347\250\213\344\272\214.md" | 54 +++++ 11 files changed, 519 insertions(+), 27 deletions(-) create mode 100644 "\346\236\227\346\231\223\351\233\252/20240708-\345\257\274\345\205\245sql\346\226\207\344\273\266.md" create mode 100644 "\346\236\227\346\231\223\351\233\252/20240709-\346\225\260\346\215\256\345\272\223\345\244\207\344\273\275\350\277\230\345\216\237.md" create mode 100644 "\346\236\227\346\231\223\351\233\252/20240710-\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" create mode 100644 "\346\236\227\346\231\223\351\233\252/20240711-Shell\347\274\226\347\250\213\344\270\200.md" create mode 100644 "\346\236\227\346\231\223\351\233\252/20240712-Shell\347\274\226\347\250\213\344\272\214.md" diff --git "a/\346\236\227\346\231\223\351\233\252/20240516-\350\231\232\346\213\237\346\234\272\345\256\211\350\243\205Debian.md" "b/\346\236\227\346\231\223\351\233\252/20240516-\350\231\232\346\213\237\346\234\272\345\256\211\350\243\205Debian.md" index 236f796..ebbfc75 100644 --- "a/\346\236\227\346\231\223\351\233\252/20240516-\350\231\232\346\213\237\346\234\272\345\256\211\350\243\205Debian.md" +++ "b/\346\236\227\346\231\223\351\233\252/20240516-\350\231\232\346\213\237\346\234\272\345\256\211\350\243\205Debian.md" @@ -3,40 +3,37 @@ `快照相当于备份 截取VM特定时刻的状态 方便后面操作不当回到快照时刻 而取消生成虚拟机内存的快照:没有内存当中的快照就会去目前这个磁盘上的虚拟机来生成快照 如果勾选他会把现在当中的这个内存也一起给它拍照保存起来 还原时也会附带内存中一起还原 如果没有取消拍越多存储空间会占用的越多` ## 下载好Dedian镜像后 创建虚拟机--选择(自定义)稍后安装虚拟机 -![alt text](https://img2.imgtp.com/2024/05/25/ErS00eYt.png) +![alt text](https://img.picui.cn/free/2024/07/12/66909de87a1d9.png) ## 选择Linux系统--版本选择Debain 12x64最新版本 -![alt text](https://img2.imgtp.com/2024/05/25/rDKhrchi.png) +![alt text](https://img.picui.cn/free/2024/07/12/66909e4c22656.png) ## 设置虚拟机名称、磁盘空间及安装位置(磁盘存储为单个文件好迁移) -![alt text](https://img2.imgtp.com/2024/05/25/Tktmq0oC.png) -![alt text](https://img2.imgtp.com/2024/05/25/ujDb53fn.png) +![alt text](https://img.picui.cn/free/2024/07/12/66909e6b51f5b.png) ## 自定义硬件(将声卡移除其他基本不动、在新CD/DVD中选择ISO镜像选择下载好的Debain镜像) `网络适配是要选择NAT模式 原因是桥接模式相当于局域网中一台独立的计算机 需要手动配置TCP/IP配置等还要与宿主机处于同一个网段 通常利用在局域网内新建一个服务器为局域网用户提供Web或网络服务 而NAT模式可以实现在虚拟系统里访问互联网(它的TCP/IP配置是由VM虚拟网络的DHCP提供的 "自动获取"实现单向访问其他主机不能访问) 通常利用在安装一个新的虚拟系统 ` -![alt text](https://img2.imgtp.com/2024/05/25/yriFzbwy.png) +![alt text](https://img.picui.cn/free/2024/07/12/66909eacb73a4.png) ## 虚拟机创建好后开机进入Debain系统环境--选择Install(文本界面) `进入界面后如果要释放鼠标按CTRL+Alt即可释放鼠标` -![alt text](https://img2.imgtp.com/2024/05/25/GdCWmUuW.png) +![alt text](https://img.picui.cn/free/2024/07/12/66909ee7ca0d7.png) -### 中文、中国键盘为美式英语(可设置主机名、域名、用户名及密码)--选择使用整个磁盘--选择所有文件放在同一个分区--完成分区操作并将修改写入磁盘--将改动写入磁盘(是)--扫描额外介质(否) +### 中文、中国键盘为美式英语(可设置主机名、域名、用户名及密码)--选择使用整个磁盘--选择所有文件放在同一个分区(推荐新手使用)--完成分区操作并将修改写入磁盘--将改动写入磁盘(是)--扫描额外介质(否) ## 镜像站点选择中国 mirrors.ustc.edu.cn(第四个) -![alt text](https://img2.imgtp.com/2024/05/25/F6hpH4c5.png) +![alt text](https://img.picui.cn/free/2024/07/12/6690a0687791d.png) ## 默认是勾选了前两个 空格取消及勾选 选择安装软件为后两个 -![alt text](https://img2.imgtp.com/2024/05/25/GpQ3ndXx.png) +![alt text](https://img.picui.cn/free/2024/07/13/669283f9efc4b.png) ## 这里一定要选择GRUB引导器 `有些安装好过后会发现界面是黑屏只有光标闪烁 有很大原因是过程没有安装好或GRUB没有安装` -![alt text](https://img2.imgtp.com/2024/05/25/27AyqkMq.png) -![alt text](https://img2.imgtp.com/2024/05/25/Rrv8u6as.png) +![alt text](https://img.picui.cn/free/2024/07/13/66928467abcc0.png) ## 这样整个流程安装好了就可以结束安装进程 -![alt text](https://img2.imgtp.com/2024/05/25/Bh0PPFXF.png) ## 使用创建的用户名及密码登陆--查看虚拟机IP -![alt text](https://img2.imgtp.com/2024/05/25/C35KHcGx.png) \ No newline at end of file +![alt text](https://img.picui.cn/free/2024/07/13/6692855862c82.png) \ No newline at end of file diff --git "a/\346\236\227\346\231\223\351\233\252/20240520-\345\256\211\350\243\205\345\256\214Debain\347\263\273\347\273\237\345\220\216\350\246\201\345\201\232\347\232\204.md" "b/\346\236\227\346\231\223\351\233\252/20240520-\345\256\211\350\243\205\345\256\214Debain\347\263\273\347\273\237\345\220\216\350\246\201\345\201\232\347\232\204.md" index 24589f8..93691ac 100644 --- "a/\346\236\227\346\231\223\351\233\252/20240520-\345\256\211\350\243\205\345\256\214Debain\347\263\273\347\273\237\345\220\216\350\246\201\345\201\232\347\232\204.md" +++ "b/\346\236\227\346\231\223\351\233\252/20240520-\345\256\211\350\243\205\345\256\214Debain\347\263\273\347\273\237\345\220\216\350\246\201\345\201\232\347\232\204.md" @@ -1,7 +1,7 @@ # 安装完Debain系统后要做的 ## 在虚拟机中使用创建的用户名及密码登陆 -![alt text](https://img2.imgtp.com/2024/05/25/C35KHcGx.png) +![alt text](https://img.picui.cn/free/2024/07/13/6692855862c82.png) ## 查看虚拟机IP 在Tabby终端测试连接 ![alt text](https://img2.imgtp.com/2024/05/25/tmTrcrov.png) diff --git "a/\346\236\227\346\231\223\351\233\252/20240619-\346\234\215\345\212\241\347\256\241\347\220\206.md" "b/\346\236\227\346\231\223\351\233\252/20240619-\346\234\215\345\212\241\347\256\241\347\220\206.md" index 8dcb4d0..721954b 100644 --- "a/\346\236\227\346\231\223\351\233\252/20240619-\346\234\215\345\212\241\347\256\241\347\220\206.md" +++ "b/\346\236\227\346\231\223\351\233\252/20240619-\346\234\215\345\212\241\347\256\241\347\220\206.md" @@ -14,7 +14,7 @@ 显示所有网络接口:ifconfig 启用或禁用网络接口:ifconfig [interface] up 或 ifconfig [interface] down -配置IP地址:ifconfig [interface] [ip_address] netmask [subnet_mask] + 配置IP地址:ifconfig [interface] [ip_address] netmask [subnet_mask] `ip: 一个功能更强大的网络配置工具,用于配置和显示网络接口和路由` diff --git "a/\346\236\227\346\231\223\351\233\252/20240702-Mysql\347\232\204\345\242\236\345\210\240\346\224\271\345\217\212\347\233\270\345\205\263\351\205\215\347\275\256.md" "b/\346\236\227\346\231\223\351\233\252/20240702-Mysql\347\232\204\345\242\236\345\210\240\346\224\271\345\217\212\347\233\270\345\205\263\351\205\215\347\275\256.md" index 7366bd4..db666c5 100644 --- "a/\346\236\227\346\231\223\351\233\252/20240702-Mysql\347\232\204\345\242\236\345\210\240\346\224\271\345\217\212\347\233\270\345\205\263\351\205\215\347\275\256.md" +++ "b/\346\236\227\346\231\223\351\233\252/20240702-Mysql\347\232\204\345\242\236\345\210\240\346\224\271\345\217\212\347\233\270\345\205\263\351\205\215\347\275\256.md" @@ -9,6 +9,8 @@ show table; --查看表 dorp database 库名; --删除数据库 select * from user; --查询user表中所有数据 + select * from user limit 10; --分页查询 + expla select * from user limit 10; --分析查询语句 delete from user; --删除表user所有数据,不改变其表结构 insert into user(username, password) values('lxx', '123456'); --向表user插入数据 diff --git "a/\346\236\227\346\231\223\351\233\252/20240704-Postgresql\347\233\270\345\205\263\351\205\215\347\275\256.md" "b/\346\236\227\346\231\223\351\233\252/20240704-Postgresql\347\233\270\345\205\263\351\205\215\347\275\256.md" index 2e9c673..858b60c 100644 --- "a/\346\236\227\346\231\223\351\233\252/20240704-Postgresql\347\233\270\345\205\263\351\205\215\347\275\256.md" +++ "b/\346\236\227\346\231\223\351\233\252/20240704-Postgresql\347\233\270\345\205\263\351\205\215\347\275\256.md" @@ -1,5 +1,5 @@ ### 需求,写一个自义函数,要求传入一个1到30到正整数,返回指定参数个的随机字符 -````````` +`````````bash -- 定义generate_random_string函数用来生成一个随机的字符串 CREATE OR REPLACE FUNCTION generate_variable_length_random_string(num_letters INT) RETURNS TEXT AS $$ -- 指定函数返回类型为文本字符串 @@ -15,13 +15,22 @@ END; -- 结束函数定义 $$ LANGUAGE plpgsql; -- 指定使用函数语言为plpgsql -- 调用函数 返回结果 - SELECT generate_variable_length_random_string(6); + SELECT generate_variable_length_random_string(5); ````````` ### 需求,写一个自定义函数,要求随机返回1到30位的英文字符,最少返回一个,最多长度30 -````````` - CREATE OR REPLACE FUNCTION generate_random_string() +`````````bash +CREATE TABLE blog( + title TEXT, + content TEXT, + author TEXT, + publishedtime timestamp, + nickname TEXT, + avatar TEXT + ); + + CREATE OR REPLACE FUNCTION generate_random_string() RETURNS TEXT AS $$ DECLARE letter TEXT := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; @@ -39,4 +48,15 @@ END; $$ LANGUAGE plpgsql; SELECT generate_random_string(); + + -- 循环往表中插入一百条数据 + DO $$ + DECLARE total INT :=100; + BEGIN + WHILE total>0 LOOP + INSERT INTO blog(title,content,author) + (SELECT generate_random_string(),generate_random_string(),generate_random_string()); + total :=total-1; + END LOOP; + END $$; ````````` \ No newline at end of file diff --git "a/\346\236\227\346\231\223\351\233\252/20240705-\346\265\213\350\257\225.md" "b/\346\236\227\346\231\223\351\233\252/20240705-\346\265\213\350\257\225.md" index ead0d08..95913e4 100644 --- "a/\346\236\227\346\231\223\351\233\252/20240705-\346\265\213\350\257\225.md" +++ "b/\346\236\227\346\231\223\351\233\252/20240705-\346\265\213\350\257\225.md" @@ -1,8 +1,63 @@ -CPU2/2G:16071.012ms -CPU4/2G:15549.066ms -CPU8/2G:19699.787ms - -内存2G/CPU2:19262.426ms -内存4G/CPU2:19905.828ms -内存6G/CPU2:28605.618ms -内存8G/CPU2:24943.528ms \ No newline at end of file +### 生成一个1~30的随机数 +`````bash +SELECT CEIL(RANDOM() * 30) AS random_number; +````` + +### 生成一个随机字母 +`````bash +SELECT (STRING_TO_ARRAY('ABCDEFGHIJKLMNOPQRSTUVWXYZ', NULL))[FLOOR(RANDOM() * 26) + 1] AS random_uppercase_letter; +````` + +### 生成随机数和字母 +`````bash + SELECT + CEIL(RANDOM() * 30) AS random_number, + (STRING_TO_ARRAY('ABCDEFGHIJKLMNOPQRSTUVWXYZ', NULL))[FLOOR(RANDOM() * 26) + 1] AS random_uppercase_letter; +````` + +### 将生成的随机数和字母拼接 +`````bash + SELECT + CEIL(RANDOM() * 30) || (STRING_TO_ARRAY('ABCDEFGHIJKLMNOPQRSTUVWXYZ', NULL))[FLOOR(RANDOM() * 26) + 1] AS random_number_letter; +````` + +### 输入一个随机数 返回数字大小数量的同一个字母 +`````bash + CREATE OR REPLACE FUNCTION generate_same_letter_string(num_letters INT) + RETURNS TEXT AS $$ + DECLARE + 字母 TEXT := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + 结果 TEXT := ''; + 随机字母 CHAR(1); + BEGIN + -- 选择一个随机字母 + 随机字母 := (STRING_TO_ARRAY(字母, NULL))[FLOOR(RANDOM() * 26) + 1]; + -- 生成num_letters个相同字母的字符串 + 结果 := REPEAT(随机字母, num_letters); + RETURN 结果; + END; + $$ LANGUAGE plpgsql; + + SELECT generate_same_letter_string(1); -- 使用函数生成一个由同一个字母组成的字符串,字母数量为1 +````` + +### 插入一万条数据 +`````bash +一、 +create table stu(id serial primary key,value int); +insert into stu(value) select generate_series(1,10000000); + +DROP TABLE stu; +SELECT * FROM stu; + +二、 + CREATE TABLE my_table ( + id INT, --(整数类型) + info TEXT,--(文本类型) + c_time TIMESTAMP --(时间类型) + ); + + INSERT INTO my_table (id, info, c_time) + SELECT generate_series(1, 100), md5(random()::text), clock_timestamp() + FROM generate_series(1, 100); + ````` \ No newline at end of file diff --git "a/\346\236\227\346\231\223\351\233\252/20240708-\345\257\274\345\205\245sql\346\226\207\344\273\266.md" "b/\346\236\227\346\231\223\351\233\252/20240708-\345\257\274\345\205\245sql\346\226\207\344\273\266.md" new file mode 100644 index 0000000..2511f90 --- /dev/null +++ "b/\346\236\227\346\231\223\351\233\252/20240708-\345\257\274\345\205\245sql\346\226\207\344\273\266.md" @@ -0,0 +1,37 @@ +- 将写好的数据库脚本保存(后缀.sql) +- 在服务器使用scp将.sql上传在root账户下 +- 进入服务器登入postgresql数据库 +- psql -d 数据库名称 -U(注意要大些)数据库用户postgres -f sql文件存放路径 +`修改文件权限 修改root用户权限` + +`````` + create or replace function generateRndString() + returns text as $$ + declare + chars text:='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + result text:=''; + rndIndex int; + rndCount int; + begin + rndCount:=(random()*30+1)::INT; + -- raise notice '%', rndCount; + WHILE rndCount>0 LOOP + rndIndex:=(random()*LENGTH(CHARS)+1)::INT; + result:= result || substr(chars,rndIndex,1); + rndCount:=rndCount-1; + END LOOP; + -- RAISE NOTICE '%', result; + return result; + end; + $$ LANGUAGE plpgsql; + + DO $$ + DECLARE total INT :=100; + BEGIN + WHILE total>0 LOOP + INSERT INTO blog(title,content,author) + (SELECT generateRndString(),generateRndString(),generateRndString()); + total :=total-1; + END LOOP; + END $$; +`````` \ No newline at end of file diff --git "a/\346\236\227\346\231\223\351\233\252/20240709-\346\225\260\346\215\256\345\272\223\345\244\207\344\273\275\350\277\230\345\216\237.md" "b/\346\236\227\346\231\223\351\233\252/20240709-\346\225\260\346\215\256\345\272\223\345\244\207\344\273\275\350\277\230\345\216\237.md" new file mode 100644 index 0000000..8028f5b --- /dev/null +++ "b/\346\236\227\346\231\223\351\233\252/20240709-\346\225\260\346\215\256\345\272\223\345\244\207\344\273\275\350\277\230\345\216\237.md" @@ -0,0 +1,58 @@ +# Mysql +## 备份 + systemctl status mysql -- 查看开启mysql + mysql -u root -p 输入密码 + + -- 修改密码 + mysql> alter user "root"@"localhost" identified by "新密码"; + mysql> flush privileges; + mysql> quit + + show databases; -- 查看一下数据库 + 查看数据库有无表 选择其中一个表 : use 表名 + 查看表有什么数据 : show tables; (无数据创建表插入数据) + 显示表结构 : desc 表名; + 插入数据 : INSERT INTO students (name, age) VALUES ('小鱼', 22); + 插入数据完成后查看 : select * from student; + 退出 + 备份 : root@debain:~# mysqldump -u root -p course(数据库名)> mysql_20240709.sql + 查看文件内容 : cat mysql_20240709.sql + + +````` +linux本机向windows传递文件: root@debain:~# scp mysql_20240709.sql administrator@172.16.40.112(windows主机IP):/d: +````` +报错 +ssh: connect to host 172.16.40.112 port 22: Connection refused +scp: Connection closed + +````` +本机cmd路径:C:\Users\Administrator> scp root@190.168.23.130:/root/mysql_20240709.sql . +````` + +- cp --- 主要是用于在同一台电脑上,在不同的目录之间来回copy文件 +- scp --- 主要是在不同的Linux系统之间来回copy文件 + +## 还原 + (思考如果修改了sql 如何完整的备份呢) +````` +root@debain:~# mysqldump -u root -p course(数据库名)< mysql_20240709.sql +````` + +# Postgresql + +## 备份 + systemctl start postgresql --查看开启postgresql + su postgres -- PostgreSQL 安装成功之后,会默认创建一个名为 postgres 的 Linux 用户 + 备份 : postgres@debain:/root$ pg_dump -U postgres -p 5432 -d course > postgresql_20240709.sql + 编辑文件权限:chmod 777 postgresql_20240709.sql + 再次重定向传递 + (C:\Users\Administrator>scp root@192.168.23.130:/root/postgresql_20240709.sql .) + +`pg_dumpall:相对于pg_dump只能备份单个库,pg_dumpall可以备份整个PostgreSql实例中所有的数据,包括角色和表空间定义` + +## 还原 +````` +postgres@debain:/root$ psql pg_dump -U postgres -p 5432 -d course -f postgresql_20240709.sql +postgres@debain:/root$ psql -upostgres < *.sql +````` \ No newline at end of file diff --git "a/\346\236\227\346\231\223\351\233\252/20240710-\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" "b/\346\236\227\346\231\223\351\233\252/20240710-\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" new file mode 100644 index 0000000..e32e6c2 --- /dev/null +++ "b/\346\236\227\346\231\223\351\233\252/20240710-\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" @@ -0,0 +1,194 @@ +# 重定向和管道符 +- 标准输出 0 + +`命令 > 文件` 将命令的输出写入到文件中 如果文件存在 则覆盖其文件中的内容 +`命令 >> 文件` 将命令的输出追加到文件末尾 如果文件不存在 则创建其文件 +`````bash +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 +`````bash +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>& 或 命令 &>> 文件` 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) +`````bash +root@debain:~# lxx.txt >& result.txt +root@debain:~# cat result.txt +-bash: lxx.txt: command not found +````` + +- 管道符 + +`|` 可以将多个简单的命令组合起来完成复杂任务 +`````bash +root@debain:~# root@debain:~# ls | root -- 以分页显示方式查看当前目录下的内容 +````` + +- 关于有没有echo<这种方式的命令 + +`在命令行中,echo 命令通常与重定向操作符一起使用,但是 echo< 这种用法并不是标准的` +````bash +echo $(所要显示的内容) +echo `所要显示的内容` +echo "所要显示的内容" +```` + +### for批量创建用户100个用户 +`````bash + 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奇数的数组 +`````bash + 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次机会猜数字,如果没有猜对,则提示小了或者大了,如果猜对了,提示恭喜,全部次数用完都没有猜对,则显示“很遗憾” +`````bash + 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乘法表 +`````bash + 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 +````` + +### 打印一个等腰三角形 +`````bash + #!/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个一等奖,要求不能重复,中奖过的人不能重复中奖,结果生成在文件中 +`````bash +#!/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/\346\236\227\346\231\223\351\233\252/20240711-Shell\347\274\226\347\250\213\344\270\200.md" "b/\346\236\227\346\231\223\351\233\252/20240711-Shell\347\274\226\347\250\213\344\270\200.md" new file mode 100644 index 0000000..3fff294 --- /dev/null +++ "b/\346\236\227\346\231\223\351\233\252/20240711-Shell\347\274\226\347\250\213\344\270\200.md" @@ -0,0 +1,75 @@ +## Shell既是一种命令语言,又是一种程序设计语言 +## shell脚本编程如同其他编程语言的一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以运行了,而linux下的shell种类众多,常用的用:`Bourne Again Shell(/bin/bash)` + +- shell脚本编写如下,并将其保存为test.sh,进入存放此文件目录 +`````bash +#!/bin/bash +echo "Hello World" +````` + +- 当作为可执行程序运行时候 +`````bash +chmod +x test.sh # 赋予可执行权限 +./test.sh # 执行程序 +````` + +- 简单尝试 +`````bash + 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 +````` + +### 布尔运算符 +`````bash +-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 +````` + +### 逻辑运算符 +`````bash +&& && 和 -a是两种不同的逻辑运算符,用于连接和执行多个命令 +|| 第一个条件执行成功后,再执行第二条,,任何一个条件失败,表达式直接返回false +````` + +### 字符串运算符 +`````bash += 检测两个字符串是否相等 相等则返回true +!= 检测两个字符串是否相等 不相等则返回true +-z 检测字符串长度是否为0 为0则返回true +-n 检测字符串长度是否为0 不为0则返回true +str 检测字符串是否为null 不为null则返回true +````` \ No newline at end of file -- Gitee