生信人

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

0

收听

12

听众

278

主题
发表于 2022-7-5 16:38:42 | 查看: 711| 回复: 0
本帖最后由 生信喵 于 2022-7-5 16:59 编辑

一、变量
1.1 什么是变量?
       变量是计算机编程中非常重要的一个概念。变量就是可以变化的量,与常量相反,例如一个固定的数字,字符属于常量。变量是计算机语言中能储存计算结果或能表示值的抽象概念。
       定义一个变量,其实就是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储运行时可更改的程序信息。
       变量需要赋值,这个值可以是一个数字,字符,也可以是更多内容。变量在程序运行过程中可以不停变化。一些程序语言在定义变量的时候需要声明变量类型,一些可以直接定义变量。
       在 Shell 语言中,可以直接定义变量。不过需要注意,在定义变量的过程中需要遵守一定的规则。这与绝大部分的编程语言类似。
       1、可以用字母、下划线、数字组成;
       2、变量名只能由字母或下划线开头,不能以数字开头;
       3、变量名不能具有二义性;
       4、不要与系统内置关键字重名;
       5、shell 中一般变量使用大写;
       6、赋值时等号两侧不能有空白“a=2”;
  1. (base) xiehs 16:23:17 ~/08.shell
  2. $ a=1
  3. (base) xiehs 16:23:19 ~/08.shell
  4. $ b=2
复制代码

1.2 shell 变量的引用
       在 shell 中,直接使用“$”符,即可引用变量的值;一般配合 echo 命令可以打印变量的值;
  1. (base) xiehs 16:23:21 ~/08.shell
  2. $ echo $a $b
  3. 1 2
  4. (base) xiehs 16:23:57 ~/08.shell
  5. $ echo $a
  6. 1
  7. (base) xiehs 16:23:59 ~/08.shell
  8. $ echo $b
  9. 2
复制代码
      如果变量名之后接有其他字符,可以使用”{}”进行区分。例如下面的案例。
  1. (base) xiehs 16:24:01 ~/08.shell
  2. $ a=illumina
  3. (base) xiehs 16:24:23 ~/08.shell
  4. $ echo ${a}_1.fq.gz ${a}_2.fq.gz
  5. illumina_1.fq.gz illumina_2.fq.gz
复制代码

1.3 内置变量
       https://www.jb51.net/article/150606.htm
环境变量
       使用 env 或者 set 可以查看系统内置变量,例如 PATH 变量。可以使用 echo 命令直接查看。
       通过 export 命令加入环境中。如果想永久修改,需要添加到家目录中的“.bashrc”文件中。
  1. (base) xiehs 16:25:02 ~/08.shell
  2. $ echo $PS1
  3. (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\]
  4. (base) xiehs 16:26:55 ~/08.shell
  5. $ echo $LANG
  6. en_US.UTF-8
  7. (base) xiehs 16:27:04 ~/08.shell
  8. $ echo $HISTSIZE
  9. 1000
复制代码

二、循环
2.1 for 循环
  1. #连续数字
  2. echo {1..10}

  3. #用户控制循环次数
  4. for i in {1..10};do echo $i;done;

  5. #连续字符串
  6. echo {a..k}
  7. for i in {a..k};do echo "$i";done;

  8. #进度条
  9. for i in {1..100};do  printf "\rComplete: %d%%" $i;sleep 0.1;done;

  10. #批量生成文件
  11. for i in {A..J};do echo touch sample${i}_1.fq.gz sample${i}_2.fq.gz;done;
  12. for i in {A..J};do touch sample${i}_1.fq.gz sample${i}_2.fq.gz;done;

  13. #批量操作
  14. ls -1 *.fq.gz
  15. for i in *.fq.gz ;do echo "fastqc -f fastq "${i};done;
复制代码
2.2 while 循环
  1. ls -1 *.fq.gz | xargs -n 2
  2. ls -1 *.fq.gz | xargs -n 2 | while read {i,j};do echo $i,$j;done;

  3. # 生成脚本
  4. ls -1 *.fq.gz | xargs -n 2 | while read {i,j};do echo "spades.py -1 $i -2 $j -o spades";done;
  5. # 生成更加完美的脚本
  6. ls -1 *.fq.gz | xargs -n 2 | while read {i,j};do echo "spades.py -1 $i -2 $j -o ${i%_*}";done;

  7. #生成数据列表
  8. ls *.fq.gz | xargs  -I{} echo "$PWD/{}" | xargs -n 2 | awk -F "/" '{print $6,$0}' | sed -e 's/_1.fq.gz//1'
  9. ls *.fq.gz | xargs  -I{} echo "$PWD/{}" | xargs -n 2 | awk -F "/" '{print $6,$0}' | sed -e 's/_1.fq.gz//1' >reads.list

  10. #生成脚本
  11. cat reads.list | while read {i,j,k};do echo $i,$j,$k;done;
  12. #校验md5
  13. for i in *.md5;do md5sum -c ${i};done;
  14. ls -1 *.md5 | while read i;do md5sum -c ${i};done;
复制代码

三、判断
  1. if [ -f $PWD/reads.list ];then echo "file exist!";else echo "no such file or dirctory";fi;

  2. #1 一个简单脚本
  3. #/bin/bash

  4. a=$1
  5. b=$2
  6. if [ $a == $b ]
  7. then
  8.     echo "a = b"
  9. elif [ $a -gt $b ]
  10. then
  11.     echo "a > b"
  12. elif [ $a -lt $b ]
  13. then
  14.     echo "a < b"
  15. else
  16.     echo "no condition"
  17. fi
复制代码

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|小黑屋|生信人

GMT+8, 2024-4-30 05:00 , Processed in 0.074914 second(s), 32 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表