前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux-生信技能树

Linux-生信技能树

原创
作者头像
用户9966449
修改2023-02-18 16:05:46
2K0
修改2023-02-18 16:05:46
举报
文章被收录于专栏:普通的生信笔记整理

0.Linux系统简介

登陆服务器:

ssh 用户名@IP地址 [端口号]

退出服务器:

exit

文件传输至服务器

选择SFTP>拖动文件至服务器窗口

代码语言:javascript
复制
echo  'export PS1="\[\033]2;\h:\u \w\007\033[33;1m\]\u \033[35;1m\t\033[0m \[\033[36;1m\]\w\[\033[0m\]\n\[\e[32;1m\]$ \[\e[0m\]" ' >> ~/.bashrc
source  ~/.bashrc

1.Linux基础命令

Linux 命令:命令格式: 命令+参数+文件

command [-options [parameter]] [file]

例子:tar(命令) -zxvf(参数) Data.tar.gz(待处理文件)

代码语言:javascript
复制
#####文件-目录#####
pwd   #打印工作目录 print working directory
ls    #列出当前目录的文件 -a,-l,-h,-S,-t,-r 参数 [路径/目录/文件名] list
cd    #切换目录 change directory
mkdir #创建新目录 make directory
#####文件-外在##### 
touch #创建新文件 
mv    #移动和重命名 move
rm    #删除 remove
cp    #复制粘贴 copy and paste
tar   #压缩或解压文件 tape archive
ln    #链接文件 link
#####文件-内在#####
cat   #查看文本 
head 	#查看文档开头,默认10行
tail	#查看文档末尾,默认10行
more	#逐页查看文档内容
less	#逐页查看文档内容,more的plus版
wc	  #统计文本的行数
cut	  #文本切割
sort	#排序
uniq	#去重复
paste #文本合并
tr		#字符替换

1.1#####文件-目录#####

代码语言:javascript
复制
1.1.1 pwd   #打印工作目录
代码语言:javascript
复制
1.1.2 ls -al ./*txt  #列出当前目录的文件 【模版示例】
# -a 全部文件,包括隐藏文件 all
# -l 目录详细信息 long
# -h 转换目录容量单位 human
# -S 以文件大小排序 Size
# -t 以时间排序 time 
# -r 倒序排列 reverse
ls [参数] [路径/目录/文件名]
  ls #当前目录文件
  ls ./ #当前目录文件,.代表当前目录
  ls ./*txt #当前目录以txt结尾的文件
  * #匹配任意多个字符
  ? #匹配任意单个字符
  ls ../ #上层目录的文件
  ls -a  #当前目录所有文件,包括隐藏文件
  ls -l  #当前目录,文件详细信息
  ll     #等同ls -la,自定义的别名
  ls -lh #加上-h参数,以K\M\G的形式显示文件大小
  ls -lh / #根目录下文件详细信息

文件权限 01234567可以表达一个特定权限
文件权限 01234567可以表达一个特定权限
代码语言:javascript
复制
#无常见参数
#常见用法:cd [路径/目录]
cd    #切换目录,没有常见参数
cd .. #到上层路径
cd  / #到根目录
cd  /teach/ #到根目录下的teach
cd -  #回看
cd ~  #到家目录
cd    #到家目录
代码语言:javascript
复制
..#上层目录
/ #根目录
#绝对路径、相对路径
代码语言:javascript
复制
mkdir #创建新目录 
常见用法 mkdir [-p] 目录名
-p/--parents #递归目录创建
代码语言:javascript
复制
tree #展示文件夹和文件

1.2#####文件-外在#####

代码语言:javascript
复制
touch #创建新文件 
  touch file
mv    #移动和重命名
    mv [待移动的文件] [移动到那个目录]
    mv [待重命名的文件] [重命名后的文件名]
mv file test/
mv file file1
####举例####
mv file1 file3 #file1重命名为file3
mv file2 file3 #file2重命名为file3
mv file3 myDir1 #file3移动进myDir1
mv myDir1 myDir2 #myDir1移动进myDir2
mv myDir2 myDir3 #myDir2重命名myDir3
代码语言:javascript
复制
-f #不显示警告讯息
-i #删除前询问
-r #删除文件夹
代码语言:javascript
复制
-r #若是目录文件,复制该目录下所有的子目录和文件
代码语言:javascript
复制
tar -zxvf Data.tar.gz      #解压文件
tar -zcvf Data.tar.gz Data #压缩文件
-x #从已有tar文件中提取文件
-c #创建一个新的tar文件
-f #输出结果到文件或设备
-v #显示处理进度
-z #将输出结果重定向给gzip指令
代码语言:javascript
复制
ln -s TARGET DIRECTORY #无s为硬链接,有s为软链接,功能类似快捷方式

1.3#####文件-内在#####

代码语言:javascript
复制
cat   #查看文本 
-A #打印所有内容
-n #打印行号
-b #打印非空白行号
zcat  #可以查看压缩的文本文件
tac #逆向查看
>重定向  Ctrl+c #退出重定向编辑
代码语言:javascript
复制
head 	#查看文档开头,默认10行
tail	#查看文档末尾,默认10行
-n    #指定查看的行数
head/tail -n 3 #查看文档开头/末尾3行
代码语言:javascript
复制
more	#逐页查看文档内容
less	#逐页查看文档内容,more的plus版
-N    #显示行号
-S    #单行显示
zless #查看压缩文件
####文件查看方式####
# 上下左右查看文本内容
# Enter键向下移动一行
# 空格键翻页
# q退出
代码语言:javascript
复制
wc	  #统计文本的行数
-l    #统计行数
-w    #统计字符串数
-c    #统计字节数,空格也算
代码语言:javascript
复制
cut	  #文本切割
-d    #默认分隔符,\t
-f    #输出哪几列
less -S Data/example.gtf | cut -f 1,3-5,7  #指定输出行数
less -S Data/example.gtf | cut -d 'h' -f 1 #指定分隔符
代码语言:javascript
复制
sort	#排序
-n #按照数值从小到大排序
-V #字符串中含有数值时,按照数值从小到大排列
-r #逆向顺序
-k #指定按哪一列排序
-t #指定分隔符
less -S Data/example.gtf | sort -n -k 4 | less -S
代码语言:javascript
复制
uniq	#去重复
-c    #统计每个字符串连续出现的行数
####使用uniq之前需要sort排序####
cat Data/example.gtf | cut -f 3 | sort |uniq
代码语言:javascript
复制
paste #文本合并
-d # 指定分隔符
-s # 按行合并
paste file1 file2 #按照列合并成一个
seq 20 | paste -- #数据变成2列
代码语言:javascript
复制
tr		#字符替换  
tr '<pre>' '<dest>'
-d #删除指定字符
-s #缩减连续重复字符

2.vim编辑器

2.1 vim编辑器的3种模式

1、命令模式

2、编辑模式

3、末行模式

代码语言:javascript
复制
vim FILENAME  #默认进入命令模式
i             #进入编辑模式 Esc退出进入命令模式
:  					#进入行末模式 Esc退出进入命令模式
wq            #在行末模式下,输入wq(退出保存)
vimtutor zh_CN#查看中文帮助文档

3 生信常见格式

fasta:2行,有id行和序列行

fastq:4行,@开头,序列信息,+保留行,碱基质量值

gff/gtf:9列,序列名字,注释来源,基因结构,起始位置,终止位置,碱基测序结果可信度,链的+向与-向,密码子偏移,其他属性

代码语言:javascript
复制
less -S Data/example.gtf | column -t |  less -S 
column -t #让列对齐

4 三驾马车

4.1 grep

grep [options] pattern file

代码语言:javascript
复制
#grep 文本搜索工具,使用正则表达式匹配模式搜索文本,打印匹配的行#
grep 'TATATT' -r Data/ # -r后面要接文件夹的位置
grep 'TATATT' -r Data/  ~ # 接多个文件夹的位置
grep -n 'TATATT' -r Data/  # 加入行号
cat example.gtf | grep -w 'gene'  # -w精确查找某个关键词
zless  Homo_sapiens.GRCh38.102.chromosome.Y.gff3.gz  | grep '	gene	'
zless  Homo_sapiens.GRCh38.102.chromosome.Y.gff3.gz  | grep -w 'gene' #限制字符范围
less example.gtf | grep -w -c 'gene' #统计函数
less example.gtf | grep -w -v 'gene' #反向选择
less example.gtf | grep -w -e 'gene' -e 'UTR' #查找两个关键词
#把关键词集成在一个文档之中,-e的可重复写法#
cat file 
gene 
UTR
start_codon
stop_codon
less Data/example.gtf | grep -w -f file | less -S
###正则表达式###
^ #行首
cat Data/example.fa   | grep '^TATA' #打印行首为TATA的基因
$ #行尾
cat Data/example.fa   | grep 'TATA$' #
cat Data/example.fa   | grep '^TATA$'#
. #表示任意一个字符
cat readme.txt  | grep 'f.ee'  #找到了free
?#之前项的0次或者1次
cat readme.txt  | grep 'f\?ee' #找到了f出现1次或者0次的情况
+ #匹配1次或者多次
cat readme.txt  | grep 're\+' 
* #匹配0次或者多次
{n} #匹配n次
{n,}#匹配至少n次
{m,n} #至少m,最多n
[] #匹配任意一个
[^] #排除字符
| #或
cat Data/example.gtf   | grep -E 'UTR|exon'

#练习1答案
一、cat example.gtf | grep -wc 'gene'
二、cat example.gtf | grep -wv 'exon'
   cat example.gtf | grep -wvc 'exon'
三、cat example.gtf | grep -w -e 'UTR' -e 'CDS'
四、cat example.fq | grep '@'
五、cat example.fq | grep ^'@'
六、grep 'TATA[AT]A[AT].' -nr Data/
附加题:一 zless Homo_sapiens.GRCh38.102.chromosome.Y.gff3.gz | cut -f 3 | grep -v '#' | grep -wc gene #不要的东西先过滤,查找自己需要的基因
二 zless Homo_sapiens.GRCh38.102.chromosome.Y.gff3.gz | cut -f 3 | grep -v '#' | sort | uniq -c | sort -n 

4.2 sed

代码语言:javascript
复制
sed #对标准输出流里面的文本进行增删改查
sed [-options] 'script:[address][!] command' file 
###常见参数###[options]部分-参数
-n #只显示sed处理过的行
-e #接一个或者多个命令
-f #执行含有sed动作的文件
-r #sed 基础正则编程扩展正则
-i #只修改不输出
###script:[address]###部分
2 #第2行
2,4 #第2行到第4行
2,$ #第2行到最后一行
2~3 #第2行开始,每隔3行取一行
2,+4#从第2行到2+4行
/pattern/ #匹配上pattern的行输出
[i] #取反'2 !'除了第2行
###script:command部分###
a #指定行的后增加一行,a后面接字符串内容
i #指定行前增加一行,i后面接字符串
d #删除某一行或几行
c #改变指定行内容
s #更改或替换字符串,'s/pattern/new/[flags]',把pattern更换成为new,默认只替换一个,可以指定flags
y #转换,字符一对一转换,'y/abd/ABC'
p #print 把匹配或者修改过的行打印出来,常与-n参数合用
cat readme.txt  | sed '1a Welcome to Biotrainee' #1行后加内容
cat readme.txt  | sed '1,3d' #删除1-3行 
cat readme.txt  | sed -e '2i Welcome to Biotrainee' -e '2a Welcome to Biotrainee()' #2行前后加字,-e参数
cat readme.txt  | sed -e '2,4i  **********' -e '2,4d' #是未修改文本的2-4行删除
cat readme.txt  | sed '2,4c **********' #2-4行被替换**********
cat readme.txt  | sed '1~3s/ee/EE/' #替换每隔3行取一次行的ee为EE
cat readme.txt  | sed -n '/ee/p'
cat readme.txt  | sed -n 's/ee/EE/p' #打印的同时完成替换
##练习2
2、head example.gtf  | sed 's/HAVANA/ENSEMBL/' #
3、head example.fa | sed '2,$ y/ATCG/TAGC/' #碱基互补配对
4、cat md.txt | sed '1 d' #删除第一行
补充:head example.fa | sed '2,$ y/ATCG/TAGC/' | rev #反向互补序列
head example.fa | sed '2,$ y/ATCG/TAGC/' | rev | tac #多行反向互补

4.3 awk

代码语言:javascript
复制
#awk 对文本和数据进行处理#
###常见参数###
-F,fiels,#设置字段分隔符
awk [options] '{script}' file  #基本格式
awk [options] '/pattern/{script}' file
awk [options] 'BEGIN{script} {script} END{script}' file
$0 #整个文本行
$1 #第一个数据段
$NF#最后一个数据段
cat example.gtf | awk '{print $9}' | less -S #默认分隔符为空格
cat example.gtf | awk '{print $9"@"$10}' | less -S 
cat example.gtf | awk '/UTR/{print $0}' | less -S
cat example.gtf | awk '/UTR/{print $7,$3,$4,$5,$1}' | less -S #输出顺序可以发生变化
cat example.gtf | awk 'BEGIN{print"find UTR feature"} /UTR/{print $0} END{print "end"}' | less -S #扩展格式,先做什么再做什么
####awk内置变量###
FS #定义字段分隔符
RS #定义记录分隔符
OFS#输出字段分隔符
ORS#输出记录分隔符
NF #列数
NR #行数
cat example.gtf | awk 'BEGIN{OFS=":"} {print $3,$4,$5}' | head 
cat example.gtf | awk 'BEGIN{OFS=":"} {print $3":"$4"-"$5}' | head #更换输出分隔符
#####awk条件判断和循环语句####
awk '{if (判断条件){yes} else {no}}'
awk '{for (循环条件){循环语句}}'
cat example.gtf  | awk '{if($3=="gene") print $0}' | less -S #判断第三列是不是基因,是的话打印出来
cat example.gtf  | awk '{if($3=="gene") {print $0} else{print $3 "is not gene"}}' | less -S #加上else
less -S example.gtf | awk '{for(i=1;i<4;i++){print $i}}' | less -S | paste - - -
#####awk 数学运算####
+,-,*,^,/,**(平方),%(取余),int(x),log(x) 
less -S example.gtf  | awk '{print int($5/$4)}' | less -S #四舍五入加0.5       

练习3: 3题 head example.gtf  | awk '/protein/{print $10,$12,$20}' | less -S | sed -e 's/unprocessed_pseudogene/protein_coding/'

5 常见符号

代码语言:javascript
复制
# #注释符号
! #非
\ #转义符,必须是这一行的最后一个字符,换行符号
/ #目录符号
| #管道
>> #追加符号 
> #重定向输出(赋值)
< #重定向输入
. / .. #当前目录/上一层目录
~ #家目录
'' & "" #在linux中有不同的含义
$ #使用变量前导符。
`` #中间的命令优先级最高,先执行,与$()一样

6 常见报错

1、找不到文件,文件不存在 使用tab键

2、没有权限

3、命令不存在 apt/yum/sudo 使用tab键

解决报错注意点:root # 和 apt/yum/sudo,使用到了管理员权限。注意自己的权限

7、软件安装

conda的安装

代码语言:javascript
复制
#官网安装包地址
wget -c https://mirrors.bfsu.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh 
#生信技能树安装包软链接地址
cd  ~
ln  -s  /home/t_linux/Miniconda3-latest-Linux-x86_64.sh  ./
#安装 输入yes或者enter返回
bash  Miniconda3-latest-Linux-x86_64.sh 
## 重新激活环境
source  ~/.bashrc 
#查看帮助文档
conda --help

配置镜像

代码语言:javascript
复制
## 配置镜像

# 下面四行配置北京外国语大学的conda的channel地址(首选)
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/main/ 
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/conda-forge/ 
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/bioconda/ 
conda config --set show_channel_urls yes 

# 下面这四行配置清华大学的conda的channel地址(首选北外,如果体验不好再换成清华)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --set show_channel_urls yes

# 如果需要官方频道,可以添加下面这两行配置官网的channel地址(不推荐)
conda config --add channels conda-forge 
conda config --add channels bioconda

# 删除defaults频道
sed -i '/defaults/d' ~/.condarc

## 配置镜像成功
# 查看配置结果
cat ~/.condarc 

创建小环境rna

代码语言:javascript
复制
# 创建名为rna的软件环境来安装转录组学分析的生物信息学软件
conda create -y -n  rna  python=3.7
# 创建小环境成功,并成功安装python3版本
# 每建立一个小环境,安装一个python=3的软件作为依赖

# 查看当前conda环境
conda info -e
conda env list

# 每次运行前,激活创建的小环境rna
conda activate rna

# 退出小环境
conda deactivate

在小环境rna中安装生信软件

#软件要安装在小环境中,不要安装在base

代码语言:javascript
复制
 # 激活环境
conda activate rna
# 安装 fastqc 软件
conda  install  fastqc
conda install mamba  #安装mamba软件
# 调出帮助文档
fastqc --help

# 可以指定软件版本
conda install -y samtools=1.14 

# aspera 
conda install -y -c hcc aspera-cli
ascp --help

# 可以一次安装多个软件
conda install -y python=3.7 libstdcxx-ng=9.1.0 trim-galore  hisat2  subread  multiqc  samtools=1.14  salmon=1.4.0 fastp fastqc
# mamba install -y python=3.7 libstdcxx-ng=9.1.0 trim-galore  hisat2  subread  multiqc  samtools=1.14  salmon=1.4.0 fastp fastqc

## 不是通过软件名来调用帮助文档,而是软件的命令
# sra-tools
prefetch --help
fastq-dump --help
which prefetch

#  trim-galore
trim_galore --help

# hisat2
hisat2 --help

# subread
featureCounts --help

# multiqc
multiqc --help

# samtools
samtools --help

# salmon
salmon --help

# fastp
fastp --help

# 

创建带R语言小环境R4

代码语言:javascript
复制
# 创建R4环境
conda create -y -n R4 python=3.8

# 激活R4环境
conda activate R4

# (可选步骤:在R4里安装mamba)
# conda install mamba

# 安装R语言本体
conda install -y r-base=4.1.2
## 或者使用mamba安装: mamba install -y r-base=4.1.2

# 安装R语言软件包
conda install -y r-getopt r-tidyverse r-ggplot2=3.3.5 bioconductor-limma bioconductor-edger bioconductor-deseq2 bioconductor-clusterprofiler bioconductor-org.hs.eg.db=3.13.0
## 或者使用mamba安装:mamba install -y r-getopt r-tidyverse r-ggplot2=3.3.5 bioconductor-limma bioconductor-edger bioconductor-deseq2 bioconductor-clusterprofiler bioconductor-org.hs.eg.db=3.13.0

R包安装的验证

代码语言:javascript
复制
##激活R
# 输入R进入R语言的交互
R
  
#验证安装包
library(getopt)
library(tidyverse)
library(ggplot2)
library(limma)
library(edgeR)
library(DESeq2)
library(clusterProfiler)
library(org.Hs.eg.db)

#包名查询  A: [Bioconductor - Home](https://bioconductor.org/) 在Bioconductor的官网搜索即可

#在R里面安装包
install.packages("BiocManager")
BiocManager::install("org.Hs.eg.db")

#退出R环境
Ctrl+d

直接导入配置文件安装

代码语言:javascript
复制
#下载钉钉群里的yaml文件
conda env create -n rna -f rna.yaml
# 如果有mamba的话可以用mamba安装
# mamba env create -n rna -f rna.yaml
conda env create -n R4 -f R4.yaml

conda以外的其他软件安装

代码语言:javascript
复制
mkdir ~/biosoft 
cd ~/biosoft
# wget -c https://cloud.biohpc.swmed.edu/index.php/s/oTtGWbWjaxsQ2Ho/download -O hisat2-2.2.1-Linux_x86_64.zip
ln  -s  /teach/software/hisat2-2.2.1-Linux_x86_64.zip  ./
unzip hisat2-2.2.1-Linux_x86_64.zip
cd hisat2-2.2.1/
./hisat2 --help
# echo 'export PATH="${HOME}/biosoft/hisat2-2.2.1/:$PATH" ' >> ~/.bashrc 
ln  -s  ~/biosoft/hisat2-2.2.1/hisat2*   ~/bin/

软件卸载、环境卸载、克隆

代码语言:javascript
复制
卸更新软件:conda  update  软件名
载软件:conda  remove  软件名
删除环境:conda  remove   环境名
克隆环境:conda  create –n 新环境名 –clone  旧环境名
查找软件:conda  search  软件名

8.Linux系统环境

文件系统结构

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

查看系统资源

代码语言:javascript
复制
查看CPU信息:lscpu
查看内存信息:free  -h
查看硬盘信息:df  -h
查看文件大小:du  -h  -d  1
查看文件大小:du  -h  -d  1
查看系统进程:top 或者 ps -ef 或者 jobs

变量

环境变量、状态变量、位置参数变量、自定义变量,调用变量时,要在变量前面加一个 $符号

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

状态变量:用于记录命令的运行结果

位置参数变量:用于用于向命令或程序脚本中传递信息

自定义变量:由用户自行定义的变量,可用于用户编写的脚本,多个命令间的值传递等

代码语言:javascript
复制
$HOME
$PATH
$SHELL
$LOGNAME
$PS1

环境变量PATH

$PATH:输入命令时Linux会去查找PATH里面记录的路径,如果命令存在某一个路径中,就可以成功调用。

找到工具的老家并且使用$PATH调用命令

代码语言:javascript
复制
echo #打印字符串,打印变量值,变量调用要加$
$echo $PATH #echo命令在服务器中的路径
/trainee2/vip28/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

# 可以把 : 替换成换行符 \n 
$echo $PATH | tr ':'  '\n'
/trainee2/vip28/miniconda3/condabin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin

# 比如 ls 命令存在
$ ls  
$ which ls 
/bin/ls

PATH的管理

在自己家目录下创建一个~/bin/文件夹并将其添加到环境变量中,后续安装软件,就拷贝可执行文件到这个bin文件夹(类似于工具箱本箱)

代码语言:javascript
复制
mkdir  ~/bin 
echo  'export "PATH=~/bin:$PATH" ' >> ~/.bashrc 
source  ~/.bashrc

状态变量

用于记录运行结果

代码语言:javascript
复制
$? #获取上个指令的执行状态返回值,0表示成功,不是0表示失败
  echo $?
$$ #当前执行的shell脚本的进程PID号   
$! #上一个后台工作的进程PID号
$_ #获取在此之前执行的命令或脚本的最后一个参数

位置参数变量

代码语言:javascript
复制
$n #n是数字,$0代表命令本身,$1-$9代表1-9个参数,10以上的数字表示为 ${1111}
$* #命令行中所有的参数,把所有参数看成一个整体
$@ #命令行中所有的参数,把所有参数区别对待
$# #表示参数的个数

if,for,while&其他

if 常见格式

代码语言:javascript
复制
# 1
if [ condition ]
then
	commands
fi

# 2
if [ condition ]
then
	commands
else
	commands
fi

# 3
if [ condition ]
then
	commands
else
	if [ condition ]
	then
		commands
	fi
fi
# (else if 可以缩写为 elif )
if [ condition ]
then
	commands
elif [ condition ]
	then
		commands
	fi
fi

if语句的常见条件:数值判断,字符串判断,文件判断

代码语言:javascript
复制
# 数值判断,运行顺序从左往右,返回逻辑值
-eq # equal 相等返回T
-ne # not equal  不相等返回T
-gt # great than 大于返回T
-ge # great equal 大于等于返回T
-lt # less than  小于返回T
-le #less equal  小于等于返回T
###例
if [ 1 -eq 1 ] #判断1是否等于1
then
  echo  "Welcome to Biotrainee() !"
else
  echo  "**************"
fi
# 结合状态参数 $?
if [ $? -eq 0 ]
then
  touch  ok.txt
fi

#字符串判断
[ -z STRING ]
[ -n STRING ]
[ STRING1 ]
[ STRING1 == STRING2 ]
[ STRING1 != STRING2  ]
[ STRING1 < STRING2 ]
###例
if [ "aa" == "aa" ]
then  
echo "equal"
fi
  
# 文件判断
[ -a FILE] #FILE存在返回T
[ -d FILE] #FILE存在并且是目录返回T
[ -f FILE] #FILE存在且是普通文件返回T
###例
if [ ! -f ok.txt ]
then
  touch  ok.txt
fi

for循环

代码语言:javascript
复制
for i in  1 2 3 4 5 
do
  echo ${i} "Welcome to Biotrainee() !" #变量要加{},否则不容易识别
done

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

list="CDS exon gene start_codon stop_codon transcript UTR"
for i in ${list}
do
  echo  "This feature is ${i}"
done

while 循环

代码语言:javascript
复制
ls file* | while  read  id;
do 
  mv ${id} ${id}.txt ; 
done


ls  file* > config
cat config | while  read id
do 
  mv  ${id}  ${id%.txt}
done

9.Shell脚本编程

代码语言:javascript
复制
##使用vim编辑器编辑,后缀常修改为.sh

#####test.sh#####
$ vim  test.sh
#!/bin/bash
echo "Welcome to Biotrainee() !"

$ bash  test.sh

# 1标准输出  和  2标准误输出
$ bash  test.sh  1>test.log  2>&1


# 可执行权限
$ ls -lh test.sh 

$ chmod  764 test.sh 

$ ls -lh test.sh 

# 路径调用可执行文件
./test.sh  

#####test2.sh#####
$ cat  test2.sh
#!/bin/bash
cat  $1

$ bash  test2.sh  readme.txt

#####test3.sh#####
$ cat  test3.sh
#!/bin/bash
echo  "Start"
sleep  100s
echo  "End"

$ bash  test3.sh  

$ nohup  bash  test3.sh  &

$ nohup  bash  test3.sh   1>test3.log  2>&1  &

$ top

$ ps -ef | grep test3

查看任务讯息

代码语言:javascript
复制
###任务提交
nohup # 不要挂断任务,把任务提交到服务器上运行
& #任务后台运行,常与nohup连用
top #实时显示系统中各个进程的资源占用情况,按q退出
htop #优化的top命令,界面更加美观
ps #process status 列出当前系统中运行的进程列表,一般加上-ef参数
ps -ef | grep #检索带有指定字符的运行任务
kill #杀掉进程,kill -9 PID

##查看命令运行情况##
  
#使用tail浮动查看输出结果
  tail -f <log file>
  
#使用less浮动查看
  less<log file> 
  shift + F
  
#用top或者htop进行监视
top/htop 或者 top | grep '$LOGNMAE'

10Linux中其他的语言脚本

R语言

代码语言:javascript
复制
$ cat test.R 
#!/usr/bin/Rscript
a = 1:10
paste0("gene",a)

$ Rscript test.R 
 [1] "gene1"  "gene2"  "gene3"  "gene4"  "gene5"  
 [6] "gene6"  "gene7"  "gene8"  "gene9"  "gene10"

Python

代码语言:javascript
复制
$ cat test.py 
#!/usr/bin/python3

print("Hello World")

$ python3 test.py 
Hello World

附加材料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 0.Linux系统简介
  • 1.Linux基础命令
    • 1.1#####文件-目录#####
      • 1.2#####文件-外在#####
        • 1.3#####文件-内在#####
        • 2.vim编辑器
          • 2.1 vim编辑器的3种模式
          • 3 生信常见格式
          • 4 三驾马车
            • 4.1 grep
              • 4.2 sed
                • 4.3 awk
                • 5 常见符号
                • 6 常见报错
                • 7、软件安装
                  • conda的安装
                    • 配置镜像
                      • 创建小环境rna
                        • 在小环境rna中安装生信软件
                          • 创建带R语言小环境R4
                            • R包安装的验证
                          • 直接导入配置文件安装
                            • conda以外的其他软件安装
                              • 软件卸载、环境卸载、克隆
                              • 8.Linux系统环境
                                • 文件系统结构
                                  • 变量
                                    • 环境变量PATH
                                    • PATH的管理
                                    • 状态变量
                                    • 位置参数变量
                                  • if,for,while&其他
                                    • if 常见格式
                                    • if语句的常见条件:数值判断,字符串判断,文件判断
                                    • for循环
                                    • while 循环
                                  • 9.Shell脚本编程
                                    • 查看任务讯息
                                  • 10Linux中其他的语言脚本
                                    • R语言
                                    • Python
                                  • 附加材料
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档