文件的查找

image.png

用find查找当前目录带有fq结尾的文件

find ./ -name ‘*fq’

得到一个结果
./Data/example.fq

用which 查找软件安装位置

which ascp

结果:/trainee2/Apr14/miniconda3/envs/rna/bin/ascp

启动环境

conda activate rna

启动rna这个conda小环境

退出环境

conda deactivate

退出rna这个conda小环境

列出已存在的环境

conda env list

conda info —env

删除已创建的小环境及安装的包

conda remove -n rna —all

安装软件

conda install fastqc

多个软件可以一起安装

conda install -y multiqc fastp

查看conda环境中已安装的软件

conda list

1.查看符合正则表达式的软件

conda list fast*

2.查看指定的环境的软件

conda list -n rna

删除软件

conda remove fastqc

想要删除特定环境下的特定软件,如何指定?

conda remove -n rna fastqc

不指定-n参数就得进入该环境之后才能进行删除操作
同样,-y能够跳过确认执行的步骤

升级软件

conda update fastqc

环境变量

环境变量:用于存储有关shell会话和工作环境的系统变量

常见环境变量:

• $HOME:当前用户的主目录

• $PATH:shell查找命令的目录列表由,冒号(:)分隔

• $SHELL:bash shell的全路径名

• $LOGNAME:当前用户的登录名

(echo $HOME)

• echo

①打印字符串 ②打印变量的值,变量调用要加 $

echo $PATH | tr ‘:’ ‘\n’

shell编程 - 图2

• 文件系统结构:

/ 虚拟目录的根目录。通常不会在这里存储文件
/bin 二进制目录,存放许多用户级的GNU工具
/boot 启动目录,存放启动文件
/dev 设备目录,Linux在这里创建设备节点
/etc 系统配置文件目录
/home 主目录,Linux在这里创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,可移动媒体设备的常用挂载点
/root root 用户的主目录
/sbin 系统二进制目录,存放许多GNU管理员级工具
/run 运行目录,存放系统运作时的运行时数据
/tmp 临时目录,可以在该目录中创建和删除临时工作文件
/usr 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里

lscpu 查看CPU信息

free -h 查看内存信息

df -h 查看硬盘信息

du -h -d 1 查看文件大小

du -sh ~ 查看文件大小

top 查看系统进程

ps -ef | grep “$LOGNAME” 查看系统进程

$LOGNAME所在家目录变量名(Apr14)

htop

htop -u Apr14查看命令运行情况
4XK%B_UAXB]`)A0ZUMQ$S2E.png

自定义变量

双引号:变量被解释

![_DZV$)_F0BO2VWGI5O416Q.png

打印bin目录带sh结尾的文件

ls /bin/*sh

意思是把bin目录下的所有以sh结尾的文件都打印出来
![$G7W0XFKPGOSD$_5D$HNHJ.png

状态变量:

用于存储有关shell会话和工作环境的系统变量

echo $?

获取执行上一个指令的执行状态返回值,返回0表示 上一个命令或者程序执行成功,返回的值为非0则表
示上一个命令执行失败。

位置参数变量:

用于用于向命令或程序脚本中传递信息

$n

n 为数字,

$0 代表命令本身,

$1~$9 代表第 1~9 个参数,

10 以上的参数需要用大括号包含, 如${10}

结构化语句

if 条件语句的常见格式:

if [ 1 -eq 1 ]

then

echo “welcome to biotrainee”

else

echo “###”

fi

![7QEC0@%A~C%$NQWO7UN3_S.png

if 条件语句的常见条件:

数值判断、字符串判断、文件判断
数值判断

-eq

[ INT1 -eq INT2 ] INT1 和 INT2 两数相等返回为真

-ne

[ INT1 -ne INT2 ] INT1 和 INT2 两数不等返回为真

-gt

[ INT1 -gt INT2 ] INT1 大于 INT2 返回为真

-ge

[ INT1 -ge INT2 ] INT1 大于等于 INT2 返回为真

-lt

[ INT1 -lt INT2 ] INT1 小于 INT2 返回为真

-le

[ INT1 -le INT2 ] INT1 小于等于 INT2 返回为真

实际用法:

数值判断

  1. $if [ 1 -eq 1 ]
  2. then
  3. echo "welcome to biotrainee"
  4. else
  5. echo "###"
  6. fi
  7. # welcome to biotrainee
  1. $ if [ $? -eq 0 ]
  2. then
  3. touch ok.txt
  4. fi
  5. # (rna) Apr14 13:21:47 ~
  6. $ ls
  7. #biosoft database Miniconda3-latest-Linux-x86_64.sh project
  8. #data filereport_read_run_PRJNA229998_tsv.txt myDir #readme.txt
  9. #Data miniconda3 ok.txt

文件判断

[ -a FILE ] 如果 FILE 存在则为真
[ -d FILE ] 如果 FILE 存在且是一个目录则返回为真
[ -f FILE ] 如果 FILE 存在且是一个普通文件则返回为真

  1. $ if [ -f readme.txt ];then echo "jojo";fi
  2. #jojo

for循环语句的常见格式:

![F[EWH4DV2_PEF840{X$FAK.png

  1. $ for i in {1..5}
  2. do
  3. echo ${i} "Hi!"
  4. sleep 3s
  5. done
  6. #1 Hi!
  7. #2 Hi!
  8. #3 Hi!
  9. #4 Hi!
  10. #5 Hi!

用循环创建多个文件

for i in {1..10};do touch file${i};done

```shell $ for i in {1..10};do touch file${i};done

$ ls

biosoft database file2 file5 file8 filereport_read_run_PRJNA229998_tsv.txt #project

data file1 file3 file6 file9 miniconda3 #readme.txt

Data file10 file4 file7 file{i..10} Miniconda3-latest-Linux-x86_64.sh

  1. vim编辑出一个含有for i in {50..60};
  2. do
  3. echo ${i}
  4. done内容的文件,保存并退出。然后bash这个文件,就可以直接运行文件里面的内容,可以使用cat查看。
  5. <a name="cPlUm"></a>
  6. ### 读取.sh文件
  7. <a name="Rr2Pz"></a>
  8. ### bash file.sh
  9. ```shell
  10. $ bash touch.sh
  11. #50
  12. #51
  13. #52
  14. #53
  15. #54
  16. #55
  17. #56
  18. #57
  19. #58
  20. #59
  21. #60
  22. $ cat touch.sh
  23. for i in {50..60}
  24. do
  25. echo ${i}
  26. done

变量要加{},否则容易 分辨不出变量
X]UXZ%(DH4O]R}KAOW38M`C.png

for循环语句的常见格式:

  1. $ list="CDS exon gene start_codon stop_codon transcript UTR"
  2. $ for i in ${list}
  3. > do
  4. > echo "this feature is ${i}"
  5. > done
  6. #this feature is CDS
  7. #this feature is exon
  8. #this feature is gene
  9. #this feature is start_codon
  10. #this feature is stop_codon
  11. #this feature is transcript
  12. #this feature is UTR

ls file*

列出此目录下所有带有file的文件

用 for循环 把文件的后缀增加一个.txt

(因为{i}.txt不存在,用mv的话,把一个文件mv称不存在的文件,相当于重命名)

  1. $ for i in `ls touch.sh`
  2. >do mv ${i} ${i}.txt
  3. >done
  4. $ ls
  5. #biosoft database Miniconda3-latest-Linux-x86_64.sh #touch.sh.txt
  6. #data filereport_read_run_PRJNA229998_tsv.txt project
  7. #Data miniconda3 readme.txt

while循环语句的常见格式:

J3Z)4T37@YO$(Y)~CPX}C)L.png

用 while循环 把文件的后缀加一个.txt

  1. $ ls touch.sh.txt | while read id
  2. > do
  3. > mv ${id} ${id}.txt
  4. > done
  5. $ ls
  6. #biosoft filereport_read_run_PRJNA229998_tsv.txt readme.txt
  7. #data miniconda3 touch.sh.txt.txt

把文件输出到config中

  1. $ ls touch.sh.txt.txt > config
  2. $ cat config
  3. #touch.sh.txt.txt

移除文件id的txt

因为刚才加了两次txt,所以移除一次后还剩一个

  1. $ cat config | while read id
  2. > do
  3. > mv ${id} ${id%.txt}
  4. > done
  5. $ ls
  6. #biosoft Data miniconda3 #readme.txt
  7. #config database Miniconda3-latest-Linux-x86_64.sh #touch.sh.txt

掐头去尾

${变量#关键字}

若变量内容从头开始的数据符合“关键字”,则将符 合的最短数据删除

${变量##关键字}

若变量内容从头开始的数据符合“关键字”,则将符 合的最长数据删除

${变量%关键字}

若变量内容从尾开始的数据符合“关键字”,则将符 合的最短数据删除

${变量%%关键字}

若变量内容从尾开始的数据符合“关键字”,则将符 合的最长数据删除

  1. $ id=example.test.fq
  2. $ echo $id
  3. #example.test.fq
  4. #####从头到最后,去掉第一个点号前面的所有内容 *.代表点前面所有内容
  5. $ echo ${id#*.}
  6. #test.fq
  7. #########也可以直接指定删除哪一个字符
  8. $ echo ${id##example.}
  9. #test.fq
  10. #######从头开始,去掉最后一个点前面的所有内容
  11. $ echo ${id##*.}
  12. #fq
  13. #####从后往前,删除第一个.前面的内容
  14. $ echo ${id%.*}
  15. #example.test
  16. ######从后往前,删除最后一个.前面的内容
  17. $ echo ${id%%.*}
  18. #example

1.生成连续文件

2.将结尾的.sra替换成.fastq

第一种方法:

  1. #############1.生成SRR1234501.sra到SRR1234510.sra这10个id
  2. $ for i in {01..10};do touch SRR12345${i}.sra;done
  3. $ ls
  4. #biosoft filereport_read_run_PRJNA229998_tsv.txt readme.txt SRR1234504.sra #SRR1234508.sra
  5. #data miniconda3 SRR1234501.sra SRR1234505.sra #SRR1234509.sra
  6. #Data Miniconda3-latest-Linux-x86_64.sh SRR1234502.sra SRR1234506.sra #SRR1234510.sra
  7. #database project SRR1234503.sra SRR1234507.sra
  8. #################2.将结尾的.sra替换成.fastq
  9. $ ls SRR12345* | while read id
  10. > do
  11. > sed 's/.sra/.fastq/g'
  12. > done
  13. #SRR1234502.fastq
  14. #SRR1234503.fastq
  15. #SRR1234504.fastq
  16. #SRR1234505.fastq
  17. #SRR1234506.fastq
  18. #SRR1234507.fastq
  19. #SRR1234508.fastq
  20. #SRR1234509.fastq
  21. #SRR1234510.fastq

Q6A{1$VKMSCRTNLZN4PXYXQ.png
第二种方法:

  1. $ for i in {01..10}
  2. > do
  3. > echo SRR12345${i}.sra >> config
  4. > done
  5. $ cat config
  6. SRR1234510.sra
  7. SRR1234501.sra
  8. SRR1234502.sra
  9. SRR1234503.sra
  10. SRR1234504.sra
  11. SRR1234505.sra
  12. SRR1234506.sra
  13. SRR1234507.sra
  14. SRR1234508.sra
  15. SRR1234509.sra
  16. SRR1234510.sra
  17. $ cat config | while read id
  18. > do
  19. > echo ${id%.sra}.fastq
  20. > done
  21. SRR1234510.fastq
  22. SRR1234501.fastq
  23. SRR1234502.fastq
  24. SRR1234503.fastq
  25. SRR1234504.fastq
  26. SRR1234505.fastq
  27. SRR1234506.fastq
  28. SRR1234507.fastq
  29. SRR1234508.fastq
  30. SRR1234509.fastq
  31. SRR1234510.fastq

查看变量长度

echo ${#id}

1、修改变量的字符串

echo ${id/test/1}

${变量/旧字符串/新字符串}
把变量id里面的第一个test替换为1
![(LS2Y26CV@U4HEKJ[GU(@9.png

2、截取变量字符

echo ${a:3}

截取第三个字符往后的所有字符
![$5SVP8D(XLOEP{L9EMJ61F.png

  1. 生成一个变量a
  2. $ a=qqq.333.666
  3. 查看变量a
  4. $ echo $a
  5. qqq.333.666
  6. 查看变量a的字符长度
  7. $ echo ${#a}
  8. 11
  9. 截取向量a中第三位以及后面所有字符(字符长度从0开头)
  10. $ echo ${a:3}
  11. .333.666
  12. 截取向量a从第三位开始的两个字符,也就是第三个和第四个字符
  13. $ echo ${a:3:2}
  14. .3
  15. 截取向量中从第三位开始,到倒数第三个截止的字符
  16. $ echo ${a:3:-2}
  17. .333.6

Shell 脚本

G)EC$`UIXS45%8S43}Y~%2B.png
YYJ0OSDIF@]$W]LI8XOGQLX.png

标准模式

![K}YLA2CO1M`)0AANTBHT7G.png

1: 标准输出流

2:标准误输出流

用vim编辑器脚本写一句Welcome to Biotrainee()!,用bash命令运行.sh结尾的脚本,然后显示。
我们可以用bash命令运行脚本的同时,把结果输出,正确的结果1输出到test.log文件中,然后把2中的错误也输出到1中,也就是正确结果和错误结果同时存在test.sh中。

  1. $ bash test.sh
  2. # Welcome to Biotrainee()!
  3. $ bash test.sh 1>test.log 2>&1
  4. $ cat test.log
  5. # Welcome to Biotrainee()!

L]9WK%~XW(FBMJ%RBW`3}0X.png

  1. 创建一个新的脚本test1.sh
  2. $ vim test1.sh
  3. $ cat test1.sh
  4. pwd
  5. pwd
  6. ppp
  7. ###运行脚本
  8. $ bash test1.sh
  9. #/trainee2/Apr14
  10. #/trainee2/Apr14
  11. #test1.sh: line 3: ppp: command not found
  12. ###2.进行重定向,但不指定标准输出和标准误输出。正确的在out.log中,错误的输出到标准输出流(屏幕)
  13. $ bash test1.sh > out.log
  14. #test1.sh: line 3: ppp: command not found
  15. $ cat out.log
  16. #/trainee2/Apr14
  17. #/trainee2/Apr14
  18. ###3.进行分开重定向,正确与错误分别进入两个log文件
  19. $ bash test1.sh 1> out.log 2> error.log
  20. $ cat out.log
  21. #/trainee2/Apr14
  22. #/trainee2/Apr14
  23. $ cat error.log
  24. #test1.sh: line 3: ppp: command not found
  25. ###4.进行分开重定向,将2输出到1中,两者都输出到out.log
  26. $ bash test1.sh 1>out.log 2>&1
  27. $ cat out.log
  28. #/trainee2/Apr14
  29. #/trainee2/Apr14
  30. #test1.sh: line 3: ppp: command not found
  31. $ ls
  32. #biosoft Data filereport_read_run_PRJNA229998_tsv.txt out.log test1.sh
  33. #config database miniconda3 project test.log
  34. #data error.log Miniconda3-latest-Linux-x86_64.sh readme.txt test.sh

chmod 修改shell脚本的文件权限

后,可以全路径调用
JY@LEH_S_O]5`GJ`AP)0SCU.png

shell脚本参数传递

首先建立一个脚本test3.sh,内容是cat $1,代表展开第一个参数。
bash test3.sh readme.txt 意思是把test3.sh里面的脚本传递给readme.txt这个第一个参数

命令传递一个参数

  1. $ cat test3.sh
  2. # #!/bin/bash
  3. # cat $1
  4. $ bash test3.sh readme.txt
  5. #Welcome to Biotrainee() !
  6. #This is your personal account in our Cloud.
  7. #Have a fun with it.
  8. #Please feel free to contact with me( email to jmzeng1314@163.com )
  9. #(http://www.biotrainee.com/thread-1376-1-1.html)

命令传递多个参数

首先创建一个脚本,内容为cat $0 cat $1 cat $2,意思是打开文件本身test4.sh,打开第一个参数out.log,打开第二个参数error.log。

  1. $ vim test4.sh
  2. $ cat test4.sh
  3. #!/bin/bash
  4. cat $0
  5. cat $1
  6. cat $2
  7. $ bash test4.sh out.log error.log
  8. #!/bin/bash
  9. cat $0
  10. cat $1
  11. cat $2
  12. /trainee2/Apr14
  13. /trainee2/Apr14
  14. test1.sh: line 3: ppp: command not found
  15. test1.sh: line 3: ppp: command not found

任务提交:

建立一个脚本,输出1—50,每隔两秒输出一个结果
WS9$]4Q8Q4C9($CPG7B}WWT.png

• tail -f sleep.out 动态查看运行结果输出

运行脚本,可以另开窗口利用tail -f sleep.out来打开sleep.out文件查看动态运行结果输出
image.png

• nohup :不要挂断任务,即把任务提交到服务器上运行

nohup bash sleep.sh &

利用nohup命令使脚本在服务器上运行,不用担心断网
image.png

& :任务后台运行,通常与 nohup 连用

• top :实时显示系统中各个进程的资源占用状况,按 q 退出

top -u Apr14

htop -u Apr14

(通过查看命令的方式找到任务编号)

• ps :Process Status列出进程列表


列出当前系统中运行的进程列表,一般加上 –ef 参数

ps -ef | grep “$LOGNAME”(可查看任务编号)

HVHY$MW`0ZABO5C2%H]44E9.png

• kill :杀掉进程,kill PID

方法一

kill -9 30872

kill -9,然后 加上任务的编号,就可以停止任务,-9意思是杀的彻底一点
(任务编号可以用方法二的命令来查找)
方法二
利用htop -u Apr14命令打开运行进程,找到想要停止的命令并把光标点在命令行让它变蓝,然后点击下方的kill,选择左边栏的9,按回车键,就可以停止任务。