前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux Shell 脚本

Linux Shell 脚本

作者头像
生信喵实验柴
发布2022-10-25 19:28:47
19K0
发布2022-10-25 19:28:47
举报
文章被收录于专栏:生信喵实验柴

一、变量

1.1 什么是变量?

变量是计算机编程中非常重要的一个概念。变量就是可以变化的量,与常量相反,例如一个固定的数字,字符属于常量。变量是计算机语言中能储存计算结果或能表示值的抽象概念。

定义一个变量,其实就是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储运行时可更改的程序信息。

变量需要赋值,这个值可以是一个数字,字符,也可以是更多内容。变量在程序运行过程中可以不停变化。一些程序语言在定义变量的时候需要声明变量类型,一些可以直接定义变量。

在 Shell 语言中,可以直接定义变量。不过需要注意,在定义变量的过程中需要遵守一定的规则。这与绝大部分的编程语言类似。

1、可以用字母、下划线、数字组成;

2、变量名只能由字母或下划线开头,不能以数字开头;

3、变量名不能具有二义性;

4、不要与系统内置关键字重名;

5、shell 中一般变量使用大写;

6、赋值时等号两侧不能有空白“a=2”;

代码语言:javascript
复制
(base) xiehs 16:23:17 ~/08.shell
$ a=1
(base) xiehs 16:23:19 ~/08.shell
$ b=2

1.2 shell 变量的引用

在 shell 中,直接使用“$”符,即可引用变量的值;一般配合 echo 命令可以打印变量的值;

代码语言:javascript
复制
(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

如果变量名之后接有其他字符,可以使用”{}”进行区分。例如下面的案例。

代码语言:javascript
复制
(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 内置变量

环境变量

使用 env 或者 set 可以查看系统内置变量,例如 PATH 变量。可以使用 echo 命令直接查看。

通过 export 命令加入环境中。如果想永久修改,需要添加到家目录中的“.bashrc”文件中。

代码语言:javascript
复制
(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 循环

代码语言:javascript
复制
#连续数字
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 循环

代码语言:javascript
复制
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;

三、判断

代码语言:javascript
复制
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

写在最后:有时间我们会努力更新的。大家互动交流可以前去论坛,地址在下面,复制去浏览器即可访问,弥补下公众号没有留言功能的缺憾。原地址暂未启用(bioinfoer.com)。

代码语言:javascript
复制
sx.voiceclouds.cn

有些板块也可以预设为大家日常趣事的分享等,欢迎大家来提建议。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信喵实验柴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档