shell脚本在linux中应用广泛,之前一直选用python写脚本来进行一些文件操作,但是最后发现shell脚本非常方便,所以特意来学习下皮毛,便于提高自己效率
定义变量
1 country="China"
2 Number=100
3
4 ##注意
5 ##变量名和等号之间不能有空格
6
7 ##若有调用变量,则加$即可,可perl一样
8
9 ## 输出 country, 用echo即可
10 echo $country字符串
1 ## 单引号
2 # 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
3 # 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
4
5 ## 双引号
6 # 双引号里可以有变量
7 country="China"
8 echo "hello, $country"
9 # 双引号里可以出现转义字符
10
11 ## 提取字符串长度,#号即可
12 string="abcd"
13 echo ${#string} #输出 4
14
15 ## 提取子字符串; string
16 string="alibaba is a great company"
17 echo ${string:1:4} #输出liba
18
19 ## 查找子字符串; index
20 string="alibaba is a great company"
21 echo `expr index "$string" is`处理路径的字符串
1 ## 获取文件名; basename
2 basename /home/xiaoming/1.txt
3 结果 1.txt
4
5 ## 获取多个路径,参数-a
6 basename -a /home/xiaoming/1.txt /home/ye/2.txt
7 结果:1.txt
8 2.txt
9
10 ## 去掉文件名的后缀,参数 -s
11 basename -s .txt /home/xiaoming/1.txt
12 结果:1
13
14 ## 获取路径 dirname
15 dirname /home/xiaoming/1.txt
16 结果:/home/xiaomingif语句
1 a=10
2 b=20
3 if [ $a == $b ]
4 then
5 echo "a is equal to b"
6 else
7 echo "a is not equal to b"
8 fi
9
10 ## 也可以一行表示,一行则需要添加分号 ;
11 if test $[2*3] -eq $[1+5]; then echo 'The two numbers are equal!'; fi;for循环
1 ## 显示主目录下以 .bash 开头的文件
2 #!/bin/bash
3 for FILE in $HOME/.bash*
4 do
5 echo $FILE
6 done
7
8
9 ## 读取文件含有fq的文件,并对其进行压缩; linux中用grep等
10 for file in $(ls |grep fq)
11 do
12 bgzip -f $file
13 done
14
15 ## 读取reads,进行hisat2比对
16 for ((i=56;i<=58;i++));do hisat2 -t -x genome -1 SRR35899${i}.sra_1.fastq.gz -2 SRR35899${i}.sra_2.fastq.gz -S SRR35899${i}.sam ;done
持续学习!!
参考