遍历列表拿到名称,筛选名称,执行命令

  1. for x in $(ls ./seqs)
  2. do #for要有do和done
  3. if [[ $x =~ '.fasta' ]];then #找含.fasta的,注意中括号旁边有空格
  4. /usr/bin/time -a -o szg_alone_19.txt -f "$x\t%E\t%U\t%S" ./bin/hhblits -cpu 24 -n 2 -i ./seqs/$x -oa3m ./szg_alone_19/"$x".a3m -d /public/home/yangsy/BFD/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt
  5. fi #if要有结束
  6. done
  7. 只要文件名的话可以
  8. for j in `ls directory_name`

得到文件名,使用${}

Link
image.png
得到多个文件名,比如var=12,echo ${var},可以正常进行拓展
还可以得到路径啊,后缀啊等等。

6、${}总结其实${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的’/‘或’.’。也就是说,上面的使用方法只是它使用的一个特例。

看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。

:表示从左边算起第一个

%:表示从右边算起第一个

:表示从左边算起最后一个

%%:表示从右边算起最后一个 换句话来说,#总是表示左边算起,%总是表示右边算起。

*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的’/‘和’.’)的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的’/‘和’.’)的右边,表示删除指定字符及其右边的内容。这里的’‘的位置不能互换,即不能把号放在#或##的右边,反之亦然。

例如:${var%%x*}表示找出从右边算起最后一个字符x,并删除字符x及其右边的字符。

看到这里,就可以知道,其实该命令的用途非常广泛,上面只是指针文件名和目录名的命名特性来进行提取的一些特例而已。 ———————————————— 版权声明:本文为CSDN博主「ljianhui」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/ljianhui/article/details/43128465

将文件内容输出成列表

mapfile myarr <alpha.log,将alpha.log的内容放进myarr,会忽略\n 链接

条件判断

小于大于之类的 链接
整数1 -eq 整数2 判断整数1是否和整数2相等(相等为真)
整数1 -ne 整数2 判断整数1是否和整数2不相等(不相等为真)
整数1 -gt 整数2 判断整数1是否大于整数2(大于为真)
整数1 -lt 整数2 判断整数1是否大于整数2(小于为真)
整数1 -ge 整数2 判断整数1是否大于等于整数2(大于等于为真)
整数1 -le 整数2 判断整数1是否小于等于整数2(小于等于为真)

标准输出写进文件

tee命令,比如ping google.com | tee -a output.txt -a表示追加。链接
free可以直接free -h >> free.txt,这样就是追加写入。

注释

注释多行

  1. <<COMMENT
  2. cmd....
  3. COMMENT

数组

Bash : 索引数组- sparkdev - 博客园

  1. #循环创建数组,不管索引,后面直接遍历
  2. declare -a array #定义存id的数组
  3. for fullname in ./part3/*.fasta.gz
  4. do
  5. filename=${fullname##*/} #取名字不要路径
  6. id=${fullname%_*} #取右边起第一个下划线之前的内容
  7. array=("${array[@]}" $id) #添加id到数组
  8. array=($(awk -v RS=' ' '!a[$1]++' <<< ${array[@]})) #数组去重
  9. done
  10. for j in "${array[@]}" #遍历id

变量自增

Link

  1. a=0
  2. for ..
  3. do
  4. let a++
  5. done
  6. echo $a