##From 生物技能树
一.Linux系统环境
1.文件系统结构
ps -ef ##拍一个照,看一下当前拍照下在运行的命令
conda clean -a ##清楚缓存文件
二.变量
1.自定义变量:
双引号:变量被解释
操作展示:cat Data/example.gtf |awk '{print $3,$4,$5}' |head ##用单引号变量不会被解释cat Data/example.gtf |awk "{print $3,$4,$5}" |head ##改成双引号,变量被shell提前展开
2.环境变量
2.1.echo
2.2.$PATH
2.2.1.一个命令能被执行的三个要素
操作展示:
$PATH 里没有记录,不能全局调用,通过绝对路径/ 相对路径的形式调用命令:绝对路径:
which ls ##找一下ls在哪 ,家目录的bin里/bin/ls ##直接使用绝对路径也可以执行ls ##也可以直接ls,全局调用/bin/ls --color=auto ##ls与该命令一致相对路径:
ls ## list 列出当前路径下信息ll file1 ##查看file1chmod u+x file1 ##给与可执行权限./file1 ##使用相对路径执行直接调用的ls和系统调用的ls为什么长得不一样呢?区别在哪?
差别来自bashrc这个文件。
vim .bashrc ##vim打开bashrc查看,有颜色展示,找到alias,可给命令起别名,所以系统调用的ls别名是,ls --color=auto,所以我们可以创造出新的自己的命令,它是其他命令的组合,很省事
创造出新的自己的命令:
简写less -SN
vim .bashrc ##vim打开bashrc, G到底部,o另起一行,进入编辑模式,插入alias le='less -SN',保存并退出
. ~/.bashrc ##重新加载文件,使其生效
le mymd5 ##即可用le代替less -SN直接查看文件
3.状态变量
4.位置参数变量
操作展示:$nvim catfile.sh ##写一个脚本,里边就写一个内容,cat readme.txtcat catfile.sh ##打印文本bash catfile.sh ##运行脚本,即可打印出里边的内容##如果还想打印出内容,但是想换个文件,方法一:重新编辑脚本;方法二:使用位置参数变量,把内容用简单的方式传递进去vim catfile.sh ##把脚本重新编辑,改成cat $1cat catfile.sh ##命令本身是$0cat catfile.sh file.md5 ##放什么东西在第二位都会被传递进去 ,file.md5就是$1
写入一个脚本展示多个参数:vim catfile.sh ##把脚本重新编辑,写入多个参数bash catfile.sh readme.txt hi Data/ ##打印readme.txt,echo hi, ls Data/是否能将三个命令区分:vim catfile.sh ##把脚本重新编辑bash catfile.sh readme.txt hi Data/ ##更改颜色成功
三.结构化语句
1.条件语句 if
1.1.数值判断:
操作展示:空格很重要
;和&&的差别:
pwd ; ls ##可以将pwd和ls写在一起,可以将多个命令写在一起,之间互不影响
pwd && ls ##pwd执行成功后才会执行ls,两者有利益相关性
1.2.字符串判断
-Z使用操作展示:
vim fq2fa.sh ##编辑一个sh文档,内容如下:
cat fq2fa.sh ##查看
bash fq2fa.sh ##给一个帮助文档
bash fq2fa.sh Data/example.fq > tmp.fa ##根据帮助文档,添加内容
less -SN tmp.fa
seqkit和seqtk两个命令,可用conda安装,针对fastq文件
1.3.文件判断
2.循环语句 for 和 while
2.1.for循环语句的常见格式:
变量要加{},否则容易 分辨不出变量
操作展示:
for i in {1..10} ##通过循环生成10个文件
> do
> touch files${i} ##变量要加{},否则容易 分辨不出变量> done
##变量要加{},否则容易 分辨不出变量
list可以写变量:
ls ##
ls file* ##查看所有file文件
for i in $(ls file*) ## 使用for循环
> do
> mv ${i} ${i}.txt
> donels ##查看
2.2.while循环语句的常见格式:
使用while循环在所有file文件夹后边加.txt
新建一个文件夹,把所有file文件放进去,通过管道符传递给while循环,更改file文件后缀:
新知识点:参数扩展
2.3.参数扩展
生成一个变量:一般来说, 去尾 比掐头更常用, * 代表任意一个任何字符
去尾的同时,还可以进行后缀替换:
echo ${id%%.*}.fa ##加入fa的后缀
2.4.练习
1.练习操作
2.如下
1.
2.
3.先用for循环建文件夹
while循环写入东西:
四.Shell 脚本编程
1.Shell 脚本
##1重定向给他test.log,2重定向给1,即把标准输出和便准误输出合并到同一个文件里
##第一种方式不推荐:因为直接输出到屏幕上,退出后就没了##推荐第三和四种方式,保存错误和正确的日志,一个分开保存,但会分开保存会丢失上下文信息,一个一起保存
2.任务提交:(重点)
是在前台提交的:
vim test.sh ##创建一个,写个for循环for i in {1..600}
do
echo ${i}
sleep 3s
donebash test.sh ##运行该脚本nohup bash test.sh & ##放在服务器上运行,如果只运行一个,会默认的把所有东西写到nohup.out里面cat nohup.outtail -f nohup.out ##浮动的查看输出htop nohup.out ##进去杀掉任务
nohup bash test.sh > test.log & ##如果运行多个,手动指定标准输出,标准误输出nohup会帮忙解决
ps -ef |grep 'Apr4311' ##使用ps -ef,使用grep抓取自己用户的正在运行的命令
kill -9 PID ##杀掉进程