&&
,cmd1 && cmd2如果cmd1成功执行(返回0,注意设置中脚本执行返回值),那么执行cmd2
||
,cmd1 || cmd2如果cmd1执行失败,那么执行cmd2
()
,{}
组合逻辑控制()组合来控制命令; {}组合控制子shell
条件判断
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
26if [ 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 逻辑或
! 逻辑否退出状态
exit n
,其中n表示数字,0表示脚本执行成功无错误,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 运行非常有用shell脚本
[ ] $# 获取脚本输出参数长度
[ ] $@ 获取脚本所有参数
循环
1
2
3
4for i in `ls `
do
echo 'yes'
done序列生成
1
2
3seq 3 # 1 2 3
seq 3 5 # 3 4 5
seq 5 2 10 # 5 7 9随机数生成
1
2
3
4
5
6
7echo $RANDOM
RANDOM是bash的一个内建函数,会返回一个[0, 32676]内的整数
生成一定范围内的随机数
beg=5
end=15
echo $((RANDOM % ($end - $beg) + $beg))shell 数学计算
1
2
3echo $((9-4)) # 5
echo $((9/4)) # 2
echo $((9/-4)) # -2多列参数对文件进行排序
1
sort -k1,1 -k2,2n sort_demo.txt # 一定是 -k1,1 形式
解包
1
2
3
4
5
6
7
8
9head -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