•条件语句if
•循环语句for 和while
•参数扩展
if条件语句的常见格式:
image.png
if条件语句的常见条件:
数值判断、字符串判断、文件判断
数值判断(用得多):
image.png
Mar23 16:24:40 ~
$ if [ 1 -eq 1 ]
> then
> echo "Hello"
> else
> echo "****"
> fi
Hello
常用场景:判断上一条命令是否正常执行
ar23 16:28:44 ~
$ if [ $? -eq 0 ]; then touch ok.txt; fi
Mar23 16:29:14 ~
$ ls
biosoft Miniconda3-latest-Linux-x86_64.sh sra2fq.log
catfile ok.txt sra2fq.sh
字符串判断(用得少)
image.png
文件判断(用得多)
image.png
常用场景:判断是否有你想看的文件,如果不存在的话,就创建一个
Mar23 16:23:38 ~
$ if [ ! -f ok.txt ]
> then
> touch ok.txt
> fi
Mar23 16:24:39 ~
$ ls
biosoft Miniconda3-latest-Linux-x86_64.sh sra2fq.log
catfile ok.txt sra2fq.sh
for循环语句的常见格式
变量要加{},否则容易分辨不出变量
Mar23 18:25:39 ~/testDir2
$ a=gene
Mar23 18:30:04 ~/testDir2
$ echo a
a
Mar23 18:30:06 ~/testDir2
$ echo $a
gene
Mar23 18:30:18 ~/testDir2
$ echo $a1
Mar23 18:30:23 ~/testDir2
$ echo ${a}1
gene1
image.png
Mar23 16:29:17 ~
$ for i in 1 2 3 4 5
> do
> echo ${i} "Hi!"
> sleep 3s
> done
1 Hi!
2 Hi!
3 Hi!
4 Hi!
5 Hi!
Mar23 18:20:49 ~
$ for i in {1..10}; do touch file${i}; done
Mar23 18:21:09 ~
$ ls
biosoft file4 ok.txt
catfile file5 pipline
Data file6 project
Data.tar.gz file7 project_backup
download file8 readme.txt
file1 file9 sra2fq.log
file10 file{i} sra2fq.sh
file2 miniconda3 sysoft
file3 Miniconda3-latest-Linux-x86_64.sh t_linux
用一条命令在每个testDir1~10文件夹中创建一个myfile文件:
Mar23 18:24:47 ~
$ mkdir testDir{1..10}
Mar23 18:25:12 ~
$ ls
biosoft file8 testDir1
catfile file9 testDir10
Data file{i} testDir2
Data.tar.gz miniconda3 testDir3
download Miniconda3-latest-Linux-x86_64.sh testDir4
file1 ok.txt testDir5
file10 pipline testDir6
file2 project testDir7
file3 project_backup testDir8
file4 readme.txt testDir9
file5 sra2fq.log t_linux
file6 sra2fq.sh
file7 sysoft
Mar23 18:25:13 ~
$ for i in {1..10}; do touch testDir${i}/myFile; done
Mar23 18:25:23 ~
$ cd testDir2
Mar23 18:25:37 ~/testDir2
$ ls
myFile
ar23 18:30:31 ~/testDir2
$ list="CDS exon gene start_codon stop_codon transcript UTP"
Mar23 18:32:41 ~/testDir2
$ for i in ${list}
> do
> echo "This feature is ${i}"
> done
This feature is CDS
This feature is exon
This feature is gene
This feature is start_codon
This feature is stop_codon
This feature is transcript
This feature is UTP
里面的内容本身可执行,并且
里面的内容优先执行
Mar23 18:57:59 ~
$ for i in `ls file*` #i只是一个代号,用x\y等都可以
> do
> mv ${i} ${i}.txt
> done
Mar23 18:59:03 ~
$ ls
biosoft file8.txt testDir1
catfile file9.txt testDir10
Data file{i}.txt testDir2
Data.tar.gz miniconda3 testDir3
download Miniconda3-latest-Linux-x86_64.sh testDir4
file10.txt ok.txt testDir5
file1.txt pipline testDir6
file2.txt project testDir7
file3.txt project_backup testDir8
file4.txt readme.txt testDir9
file5.txt sra2fq.log t_linux
file6.txt sra2fq.sh
file7.txt sysoft
如果不加``,那么mv这一步会出错,因为没有ls这样的文件夹
Mar23 18:59:06 ~
$ for i in ls file*; do mv ${i} ${i}.txt; done
mv: cannot stat 'ls': No such file or directory
while循环语句的常见格式:
image.png
Mar23 19:10:55 ~
$ ls file* | while read jimmy
> do
> mv ${jimmy} ${jimmy}.txt
> done
Mar23 19:12:18 ~
$ ls
biosoft file8.txt.txt.txt testDir1
catfile file9.txt.txt.txt testDir10
Data file{i}.txt.txt.txt testDir2
Data.tar.gz miniconda3 testDir3
download Miniconda3-latest-Linux-x86_64.sh testDir4
file10.txt.txt.txt ok.txt testDir5
file1.txt.txt.txt pipline testDir6
file2.txt.txt.txt project testDir7
file3.txt.txt.txt project_backup testDir8
file4.txt.txt.txt readme.txt testDir9
file5.txt.txt.txt sra2fq.log t_linux
file6.txt.txt.txt sra2fq.sh
file7.txt.txt.txt sysoft
参数扩展
作用:掐头去尾
image.png
般来说,去尾比掐头更常用
Mar23 19:31:21 ~
$ id=example.test.fq
Mar23 19:31:30 ~
$ echo $id
example.test.fq
Mar23 19:32:03 ~
$ echo ${id#*.}
test.fq
Mar23 19:32:28 ~
$ echo ${id##*.}
fq
Mar23 19:33:46 ~
$ echo ${id%.*}
example.test
Mar23 19:35:37 ~
$ echo ${id%%.*}
example
表示追加,意思是不清掉里面的内容,只是增加。
表示重定向,它本来是打印到屏幕里的,但是现在重定向到一个变量。
Mar23 23:57:20 ~
$ id=example.test.test.fq
Mar23 23:57:25 ~
$ echo ${id//test/1}
example.1.1.fq
Mar23 23:57:33 ~
$ echo ${id/test/1}
example.1.test.fq
Mar23 23:57:38 ~
$ echo ${id/test/}
example..test.fq
Mar23 23:57:46 ~
$ echo ${id/test}
example..test.fq
Mar23 23:59:19 ~
$ echo ${id/.fq/}
example.test.test
Mar23 23:59:39 ~
$ echo ${id/.fq}
example.test.test
Mar23 23:59:49 ~
$ echo ${id//.test}
example.fq
查看字符长度
Mar23 00:20:52 ~
$ id=Data.tar.gz
Mar23 00:34:54 ~
$ echo $id
Data.tar.gz
Mar23 00:35:00 ~
$ echo ${#id}
11