shell 命令使用笔记

  1. &&,cmd1 && cmd2

    如果cmd1成功执行(返回0,注意设置中脚本执行返回值),那么执行cmd2

  1. ||,cmd1 || cmd2

    如果cmd1执行失败,那么执行cmd2

  1. (), {}组合逻辑控制

    ()组合来控制命令; {}组合控制子shell

  1. 条件判断

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    if [ condition ]; then
    # if test condition; then
    echo 'yes'
    fi

    #使用[]判断条件时,[]和condition之间必须用空格分隔开
    # -d 判断是不是文件夹
    # -f 判断是不是文件
    # -L 判断是不是链接
    # -s 判断文件是否存在且非空
    # -r 判断文件是否可读
    # -w 判断文件是否可写
    # -x 判断文件是否可执行
    # -z 判断是否空字符串
    # -n 判断是否非空字符串
    # = 判断字符串是否相等
    # != 判断字符串是否不等
    # -eq 判断数值是否相等
    # -ne 判断数值是否不等
    # -gt 第一个数大于第二个数
    # -ge 第一个数大于等于第二个数
    # -lt 第一个数小于第二个数
    # -le 第一个数小于等于第二个数
    # -a 逻辑与
    # -o 逻辑或
    # ! 逻辑否
  2. 退出状态

    exit n,其中n表示数字,0表示脚本执行成功无错误,1表示执行失败某处有错误

    可以使用 $? 获得最后执行命令推出状态

  1. shell 脚本模版

    1
    2
    3
    4
    5
    #!/usr/bin/env bash    # 指定 shell 执行程序
    #!/bin/bash # option B

    set -x # 打印出正在执行的 cmd
    set -e # shell 中任一 cmd 执行推出状态不为 0 时,直接退出整个 shell 任务

    set -e 针对多 cmd ,且存在依赖关系的 shell 运行非常有用

  2. shell脚本

    • [ ] $# 获取脚本输出参数长度

    • [ ] $@ 获取脚本所有参数

  1. 循环

    1
    2
    3
    4
    for i in `ls `
    do
    echo 'yes'
    done
  2. 序列生成

    1
    2
    3
    seq 3    # 1 2 3
    seq 3 5 # 3 4 5
    seq 5 2 10 # 5 7 9
  3. 随机数生成

    1
    2
    3
    4
    5
    6
    7
    echo $RANDOM
    # RANDOM是bash的一个内建函数,会返回一个[0, 32676]内的整数

    # 生成一定范围内的随机数
    beg=5
    end=15
    echo $((RANDOM % ($end - $beg) + $beg))
  4. shell 数学计算

    1
    2
    3
    echo $((9-4))    # 5
    echo $((9/4)) # 2
    echo $((9/-4)) # -2
  5. 多列参数对文件进行排序

    1
    sort -k1,1 -k2,2n sort_demo.txt    # 一定是 -k1,1 形式
  6. 解包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    head -n 5 hg19-tRNAs_map.txt
    # chr1.trna1 tRNA-Val-CAC-13-1
    # chr1.trna10 tRNA-Asn-GTT-16-1
    # chr1.trna100 tRNA-Asn-GTT-6-1

    cat hg19-tRNAs_name_map.txt | while read pos name; do echo "Position: $pos Name: $name"; done | head -n 5
    # Position: chr1.trna1 Name: tRNA-Val-CAC-13-1
    # Position: chr1.trna10 Name: tRNA-Asn-GTT-16-1
    # Position: chr1.trna100 Name: tRNA-Asn-GTT-6-1
---------本文结束,感谢您的阅读---------