生信喵 发表于 2022-7-5 16:38:42

Linux Shell 脚本

本帖最后由 生信喵 于 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\u\[\e \[\e\t \[\e\[\e\w\[\e\n\[\e$ \[\e
(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};doprintf "\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
页: [1]
查看完整版本: Linux Shell 脚本