|
发表于 2022-7-5 16:38:42
|
查看: 1289 |
回复: 0
本帖最后由 生信喵 于 2022-7-5 16:59 编辑
一、变量
1.1 什么是变量?
变量是计算机编程中非常重要的一个概念。变量就是可以变化的量,与常量相反,例如一个固定的数字,字符属于常量。变量是计算机语言中能储存计算结果或能表示值的抽象概念。
定义一个变量,其实就是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储运行时可更改的程序信息。
变量需要赋值,这个值可以是一个数字,字符,也可以是更多内容。变量在程序运行过程中可以不停变化。一些程序语言在定义变量的时候需要声明变量类型,一些可以直接定义变量。
在 Shell 语言中,可以直接定义变量。不过需要注意,在定义变量的过程中需要遵守一定的规则。这与绝大部分的编程语言类似。
1、可以用字母、下划线、数字组成;
2、变量名只能由字母或下划线开头,不能以数字开头;
3、变量名不能具有二义性;
4、不要与系统内置关键字重名;
5、shell 中一般变量使用大写;
6、赋值时等号两侧不能有空白“a=2”;
- (base) xiehs 16:23:17 ~/08.shell
- $ a=1
- (base) xiehs 16:23:19 ~/08.shell
- $ b=2
复制代码
1.2 shell 变量的引用
在 shell 中,直接使用“$”符,即可引用变量的值;一般配合 echo 命令可以打印变量的值;
- (base) xiehs 16:23:21 ~/08.shell
- $ echo $a $b
- 1 2
- (base) xiehs 16:23:57 ~/08.shell
- $ echo $a
- 1
- (base) xiehs 16:23:59 ~/08.shell
- $ echo $b
- 2
复制代码 如果变量名之后接有其他字符,可以使用”{}”进行区分。例如下面的案例。
- (base) xiehs 16:24:01 ~/08.shell
- $ a=illumina
- (base) xiehs 16:24:23 ~/08.shell
- $ echo ${a}_1.fq.gz ${a}_2.fq.gz
- illumina_1.fq.gz illumina_2.fq.gz
复制代码
1.3 内置变量
https://www.jb51.net/article/150606.htm
环境变量
使用 env 或者 set 可以查看系统内置变量,例如 PATH 变量。可以使用 echo 命令直接查看。
通过 export 命令加入环境中。如果想永久修改,需要添加到家目录中的“.bashrc”文件中。
- (base) xiehs 16:25:02 ~/08.shell
- $ echo $PS1
- (base) \[\e[31;1m\]\u\[\e[0m\] \[\e[32;1m\]\t \[\e[0m\]\[\e[34;1m\]\w\[\e[0m\]\n\[\e[31;1m\]$ \[\e[0m\]
- (base) xiehs 16:26:55 ~/08.shell
- $ echo $LANG
- en_US.UTF-8
- (base) xiehs 16:27:04 ~/08.shell
- $ echo $HISTSIZE
- 1000
复制代码
二、循环
2.1 for 循环
- #连续数字
- echo {1..10}
- #用户控制循环次数
- for i in {1..10};do echo $i;done;
- #连续字符串
- echo {a..k}
- for i in {a..k};do echo "$i";done;
- #进度条
- for i in {1..100};do printf "\rComplete: %d%%" $i;sleep 0.1;done;
- #批量生成文件
- for i in {A..J};do echo touch sample${i}_1.fq.gz sample${i}_2.fq.gz;done;
- for i in {A..J};do touch sample${i}_1.fq.gz sample${i}_2.fq.gz;done;
- #批量操作
- ls -1 *.fq.gz
- for i in *.fq.gz ;do echo "fastqc -f fastq "${i};done;
复制代码 2.2 while 循环
- ls -1 *.fq.gz | xargs -n 2
- ls -1 *.fq.gz | xargs -n 2 | while read {i,j};do echo $i,$j;done;
- # 生成脚本
- ls -1 *.fq.gz | xargs -n 2 | while read {i,j};do echo "spades.py -1 $i -2 $j -o spades";done;
- # 生成更加完美的脚本
- ls -1 *.fq.gz | xargs -n 2 | while read {i,j};do echo "spades.py -1 $i -2 $j -o ${i%_*}";done;
- #生成数据列表
- ls *.fq.gz | xargs -I{} echo "$PWD/{}" | xargs -n 2 | awk -F "/" '{print $6,$0}' | sed -e 's/_1.fq.gz//1'
- ls *.fq.gz | xargs -I{} echo "$PWD/{}" | xargs -n 2 | awk -F "/" '{print $6,$0}' | sed -e 's/_1.fq.gz//1' >reads.list
- #生成脚本
- cat reads.list | while read {i,j,k};do echo $i,$j,$k;done;
- #校验md5
- for i in *.md5;do md5sum -c ${i};done;
- ls -1 *.md5 | while read i;do md5sum -c ${i};done;
复制代码
三、判断 - if [ -f $PWD/reads.list ];then echo "file exist!";else echo "no such file or dirctory";fi;
- #1 一个简单脚本
- #/bin/bash
- a=$1
- b=$2
- if [ $a == $b ]
- then
- echo "a = b"
- elif [ $a -gt $b ]
- then
- echo "a > b"
- elif [ $a -lt $b ]
- then
- echo "a < b"
- else
- echo "no condition"
- fi
复制代码
|
|