前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux - 结构化语句及参数扩展

Linux - 结构化语句及参数扩展

原创
作者头像
用户10328045
发布2023-02-21 08:55:46
5410
发布2023-02-21 08:55:46
举报
文章被收录于专栏:R语言小白R语言小白

生信技能树学习笔记

if 条件语句

常见格式

image.png
image.png

常见条件:数值判断、字符串判断、文件判断

数值判断

  • eq 等于
  • ne 不等于
  • gt 大于
  • ge 大于等于
  • lt 小于
  • le 小于等于
代码语言:{rsetup, include =FALSE}
复制
if [ 1 -eq 1 ]  ## 括号和数字之间要有空格
> then
> echo "Welcome"
> else
> echo "***"
> fi
代码语言:{r setup, include =FALSE}
复制
if [ $? -eq 0 ]   ## 判断上一个命令是否执行成功
> then
> touch ok.txt
> fi

字符串判断

  • -z STRING STRING的长度为零则返回为真
  • -n STRING STRING的长度非零则返回为真
  • STRING1 字符串不为空则返回为真
  • STRING1 == STRING2 字符串相同则返回为真
  • STRING1 != STRING2 字符串不相同则返回为真
  • STRING1 < STRING2 如果STRING1字典排序在STRING2前则为真
代码语言:{r setup, include =FALSE}
复制
if [ -z $1]
> then
> echo "usage: $0 <fq file> > <fa file>"
> exit $E_BADARGS
> fi

文件判断

  • -a FILE ## 如果FILE存在即为真
  • -d FILE ## 如果FILE存在且是一个目录则返回为真
  • -f FILE ## 如果FILE存在且是一个普通文件则返回为真
代码语言:{r setup, include =FALSE}
复制
if [ ! -f ok.txt ] 
> then
> touch ok.txt
>fi

for 循环语句

image.png
image.png
代码语言:{r setup, include =FALSE}
复制
for i in 1 2 3 4 5
> do
> echo "$i Hi!"
> sleep 3s
> done
代码语言:{r setup, include =FALSE}
复制
for i in {1..10}
> do
> touch file${i} ## 变量建议加花括号
> done
代码语言:{r setup, include =FALSE}
复制
list="CDS exon gene start_codon stop codon transcript UTR"
for i in ${list}
> do
> echo "This feature in ${i}"
> done
代码语言:{r setup, include =FALSE}
复制
ls file*
for i in `ls file*`   ## 反引号最优先执行
> do
> mv ${i} ${i}.txt
> done

while 循环

image.png
image.png
代码语言:{r setup, include =FALSE}
复制
ls file* | while read id
> do
> mv ${id} ${id}.txt
> done
代码语言:{r setup, include =FALSE}
复制
ls file* > config
cat config | while read id
> do
> mv ${id} ${id%.txt} ## 减少一段后缀
> done

参数扩展

作用:掐头去尾

  • ${变量#关键字} ——若变量内容从开始的数据符合“关键字”,则将符合的最数据删除
  • ${变量##关键字}——若变量内容从开始的数据符合“关键字”,则将符合的最数据删除
  • ${变量%关键字}——若变量内容从开始的数据符合“关键字”,则将符合的最数据删除
  • ${变量%%关键字}——若变量内容从开始的数据符合“关键字”,则将符合的最数据删除
代码语言:{r setup, include =FALSE}
复制
id=example.test.fq ## 定义变量
echo ${id#*.}  ## 此时输出 test.fq (从头删直到最短的 . 为止)
echo ${id#*e} ## 此时输出 xample.test.fq (从头删直到最短的e为止)
echo ${id##*e} ## 此时输出 st.fq (从头删直到最长的e为止)
echo ${id%.*} ## 此时输出 example.txt (从后往前删直到最短的.为止)
echo ${id%%e*} ## 此时输出  (从后往前删直到最长的e为止)
echo ${id%.*}.fa ## 此时输出 example.test.fa (把example.fq变成example.fa) 
  • ${变量/旧字符串/新字符串} 若变量内容符合“旧字符串”,则首个旧字符串会被新字符串替换
  • ${变量//旧字符串/新字符串} 若变量内容符合“旧字符串”,则全部旧字符串会被新字符串替换
代码语言:{r setup, include =FALSE}
复制
id=Data.tar.gz
echo ${id/ta/xy} ## 输出Daxy.tar.gz
echo ${id//ta/xy} ## 输出Daxy.xyr.gz
  • ${变量:索引} 截取变量从索引为止到末尾的所有字符
  • ${变量:索引:n} 截取变量从索引位置开始的n个字符
  • ${变量:索引:(-n)} 截取变量从索引位置到倒数第n+1为的所有字符
  • ${变量:索引:-n}
代码语言:{r setup, include =FALSE}
复制
id=Data.tar.gz
echo $id ## 输出Data.tar.gz
echo ${#id} ## 输出11 (变量前加 # 输出长度,从0开始一直到10)
echo ${id:3} ## 输出a.tar.gz
echo ${id:3:5} ## 输出a.tar
echo ${id:3:-1} ## 输出a.tar.g

练习

代码语言:{r setup, include =FALSE}
复制
## 用for循环生成SRR1234501.fastq到SRR1234510.fastq的10个空文件
for i in {1..10}
> do 
> touch SRR12345${i}.fastq
> done

## 生成fq2fa.sh处理这些文件的命令
ls *fastq | while read id
> do
> echo "fq2fa.sh ${id} > {id%.*}.fasta"
> done

## 或者
ls *fastq | while read id
> do
> echo "fq2fa.sh ${id} > ${id/fastq/fasta}
> done
代码语言:{r setup, include =FALSE}
复制
id=example
fastqc ~/Data/${id}.fq

## 用if判断$?的是否为0,如果是,输出yes,如果否,输出no
if [ $? -eq 0 ]
> then
> echo "yes"
> else
> echo "no"
> fi

## 生成10个文件,file1-10
for i in {1..10}
> do
> touch file${i}
> done

## 用 while read id 循环,在每个文件中写入一句话
ls file* | while read id
> do
> echo "Hi!" > ${id}
> done

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • if 条件语句
    • 数值判断
      • 字符串判断
        • 文件判断
        • for 循环语句
        • while 循环
        • 参数扩展
        • 练习
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档