Linux - 结构化语句及参数扩展
2023-03-07 09:51:17 时间
生信技能树学习笔记
if 条件语句
常见格式
常见条件:数值判断、字符串判断、文件判断
数值判断
- eq 等于
- ne 不等于
- gt 大于
- ge 大于等于
- lt 小于
- le 小于等于
if [ 1 -eq 1 ] ## 括号和数字之间要有空格
> then
> echo "Welcome"
> else
> echo "***"
> fi
if [ $? -eq 0 ] ## 判断上一个命令是否执行成功
> then
> touch ok.txt
> fi
字符串判断
- -z STRING STRING的长度为零则返回为真
- -n STRING STRING的长度非零则返回为真
- STRING1 字符串不为空则返回为真
- STRING1 == STRING2 字符串相同则返回为真
- STRING1 != STRING2 字符串不相同则返回为真
- STRING1 < STRING2 如果STRING1字典排序在STRING2前则为真
if [ -z $1]
> then
> echo "usage: $0 <fq file> > <fa file>"
> exit $E_BADARGS
> fi
文件判断
- -a FILE ## 如果FILE存在即为真
- -d FILE ## 如果FILE存在且是一个目录则返回为真
- -f FILE ## 如果FILE存在且是一个普通文件则返回为真
if [ ! -f ok.txt ]
> then
> touch ok.txt
>fi
for 循环语句
for i in 1 2 3 4 5
> do
> echo "$i Hi!"
> sleep 3s
> done
for i in {1..10}
> do
> touch file${i} ## 变量建议加花括号
> done
list="CDS exon gene start_codon stop codon transcript UTR"
for i in ${list}
> do
> echo "This feature in ${i}"
> done
ls file*
for i in `ls file*` ## 反引号最优先执行
> do
> mv ${i} ${i}.txt
> done
while 循环
ls file* | while read id
> do
> mv ${id} ${id}.txt
> done
ls file* > config
cat config | while read id
> do
> mv ${id} ${id%.txt} ## 减少一段后缀
> done
参数扩展
作用:掐头去尾
- ${变量#关键字} ——若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除
- ${变量##关键字}——若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除
- ${变量%关键字}——若变量内容从尾开始的数据符合“关键字”,则将符合的最短数据删除
- ${变量%%关键字}——若变量内容从尾开始的数据符合“关键字”,则将符合的最长数据删除
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)
- ${变量/旧字符串/新字符串} 若变量内容符合“旧字符串”,则首个旧字符串会被新字符串替换
- ${变量//旧字符串/新字符串} 若变量内容符合“旧字符串”,则全部旧字符串会被新字符串替换
id=Data.tar.gz
echo ${id/ta/xy} ## 输出Daxy.tar.gz
echo ${id//ta/xy} ## 输出Daxy.xyr.gz
- ${变量:索引} 截取变量从索引为止到末尾的所有字符
- ${变量:索引:n} 截取变量从索引位置开始的n个字符
- ${变量:索引:(-n)} 截取变量从索引位置到倒数第n+1为的所有字符
- ${变量:索引:-n}
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
练习
## 用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
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
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的