01 Linux 系统环境
文件系统结构
![](https://i-blog.csdnimg.cn/blog_migrate/79a9ae2c389cecbf45f17fd93adf02af.png)
/ 虚拟目录的根目录。通常不会在这里存储文件
/bin 二进制目录,存放许多用户级的GNU工具
/boot 启动目录,存放启动文件
/dev 设备目录,Linux在这里创建设备节点
/etc 系统配置文件目录
/home 主目录,Linux在这里创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,可移动媒体设备的常用挂载点
/root root用户的主目录
/sbin 系统二进制目录,存放许多GNU管理员级工具
/run 运行目录,存放系统运作时的运行时数据
/tmp 临时目录,可以在该目录中创建和删除临时工作文件
/usr 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里
![](https://i-blog.csdnimg.cn/blog_migrate/a20222f1407051529c15d8a048f0bc55.png)
• 查看CPU信息:lscpu • 查看内存信息:free -h • 查看硬盘信息:df -h • 查看文件大小:du -h -d 1 • 查看文件大小:du -sh ~ • 查看系统进程: top htop 动态查看,看所有用户; htop -u June16【即自己的登录名】,看自己在运行的命令 ps -ef | grep "$LOGNAME" 该命令执行瞬间在进行的命令
变量
环境变量、状态变量、位置参数变量、自定义变量,调用变量时,要在变量前面加一个 $ 符号
• 环境变量: 用于存储有关shell会话和工作环境的系统变量
常见环境变量:
• $HOME:当前用户的主目录
• $PATH:shell查找命令的目录列表,由冒号(:)分隔。
![](https://i-blog.csdnimg.cn/blog_migrate/130e1fdc7c24f9dd1f93576fb16ce273.png)
• $SHELL:bash shell的全路径名
• $LOGNAME:当前用户的登录名
• $PS1:shell命令行界面的主提示符
![](https://i-blog.csdnimg.cn/blog_migrate/4e7e757b7ad67e843a5b90d4d65f9882.png)
• 位置参数变量: 用于用于向命令或程序脚本中传递信息
• 状态变量: 用于存储有关shell会话和工作环境的系统变量
• 自定义变量
由用户自行定义的变量,可用于用户编写的脚本,多个命令间的值传递等
03 结构化语句
• 条件语句 if
常见格式
![](https://i-blog.csdnimg.cn/blog_migrate/2f252bf4c0b3f72085dc6b35502000d1.png)
常见条件:数值、字符串、文件判断
数值判断
![](https://i-blog.csdnimg.cn/blog_migrate/2d2ec6699b9c27e1b6b4f7b6678f5350.png)
if [ $? -eq 0 ] ##前后要有空格 then touch ok.txt fi
字符串判断
文件判断
• 循环语句 for 和 while
for
常见格式
![](https://i-blog.csdnimg.cn/blog_migrate/d32595bf219fc1819109c8ca439080d4.png)
for i in {1..10} do touch file${i} ##为了不出问题,可以变量都加上{} done
![](https://i-blog.csdnimg.cn/blog_migrate/47790873581ca2f5bf7ff043b5fa8534.png)
!!!!!
![](https://i-blog.csdnimg.cn/blog_migrate/7046b9a8ea4dcd5991fe76db77f863e5.png)
不按shift时直接按~键即可打出反引号
while
常见格式
![](https://i-blog.csdnimg.cn/blog_migrate/08b603251994337bf33a63941410868f.png)
• 参数扩展
![](https://i-blog.csdnimg.cn/blog_migrate/baa737d5b1fd71a973af16a26faed908.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e146bf9de3af450a8b46f14e8b7f638c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f23b3e249e27a607cb750852b55afad0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/728ccad64e1836fa9c05eba9bf6f8795.png)
索引位置从0开始
练习
1.生成SRR1234501.sra到SRR1234510.sra这10个id
2.将结尾的.sra替换成.fastq
for i in {01..10} do echo SRR12345{i}.sra >> config done cat config | while read id do echo ${id%.sra}.fastq done cat config | while read id do echo ${id//sra/fastq} done
![](https://i-blog.csdnimg.cn/blog_migrate/e82e67d0db191d1d60674032f69c2e11.png)
两个>>,否则不行
![](https://i-blog.csdnimg.cn/blog_migrate/68cfc07ba0d71f2fc8616bb82640b6a1.png)
生成文件时sra前多了一个空格,while循环中没有空格→替换失败
04 Shell 脚本编程
• Shell 脚本
保存脚本
![](https://i-blog.csdnimg.cn/blog_migrate/761f7105e1426ee4b480e3f02af40e36.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d68c3ff8135dc33e328a09a3421dbc79.png)
写三句命令,两句正确一句错误 vim test.sh #!bin/bash pwd pwd ppp 1.不进行重定向,结果直接输出到标准输出流(屏幕) bash test.sh 2.进行重定向,但不指定标准输出和标准误输出 正确的在out.log中,错误的输出到标准输出流(屏幕) bash test.sh > out.log 3.进行分开重定向,正确与错误分别进入两个log文件 bash test.sh > out.log 2 > error.log 4.进行分开重定向,将2输出到1中,两者都输出到out.log bash test.sh > out.log 2>&1 ## 最推荐,可以把有问题的命令清晰呈现 cat out.log
shell脚本的文件权限
![](https://i-blog.csdnimg.cn/blog_migrate/ebd7590f0b42895426caea07006e0954.png)
ll test.sh chmod 764 test.sh
参数传递
vim test2.sh i #!/bin/bash cat $1 ESC :wq bash test2.sh readme.txt
![](https://i-blog.csdnimg.cn/blog_migrate/a0457397a0323061d40bad7415515965.png)
• 任务提交
• nohup :不要挂断任务,即把任务提交到服务器上运行 • & :任务后台运行,通常与 nohup 连用 • top :实时显示系统中各个进程的资源占用状况,按 q 退出 • ps :Process Status列出当前系统中运行的进程列表, 一般加上 –ef 参数 • kill :杀掉进程,kill [PID]
![](https://i-blog.csdnimg.cn/blog_migrate/0705ea6990ebba728fd0b0fa28e57396.png)
vim sleep.out i #!/bin/bash for i in {1..500} do echo $i>>sleep.out sleep 2s done ESC :wq 1.挂后台运行 nohup bash sleep.out & 2.动态查看输出内容(此处查看nohup.out是没有内容的哦) tail -f sleep.out 3.用top、htop分别查看命令的运行情况 top -u Last30 htop -u Last30 4.用ps -ef查看挂后台的命令 ps -ef | grep "June16" ##"登录名" 5.杀死命令 kill -9 id ## kill -9 无条件杀死
推荐bash教程
![](https://i-blog.csdnimg.cn/blog_migrate/874f9bfb7570b1673c6e35916b6c5552.png)
1.阮一峰的bash脚本教程Bash 脚本教程 - 网道
2. 鸟哥的Linux私房菜:基础学习篇 第四版 (第14章)第十二章、学习 Shell Scripts | 鸟哥的 Linux 私房菜:基础学习篇 第四版