1.字符串操作符(替换操作符)
${var:-word}: 如果var 存在且不为空, 返回它的值, 否则返回word
${var:=word}: 如果var 存在且不为空, 返回它的值, 否则将word 赋给var, 返回它的值
${var:+word}: 如果var 存在且不为空, 返回word, 否则返回空
${var:?message} 如果var 存在且不为空, 返回它的值,
否则显示“-bash: var: message”, 然后退出当前命令或脚本
${var:offset[:length]} 从offset 位置开始返回var 的一个长为length 的子串,
若没有length, 则默认到var 串末尾
ct@ehbio:~$ echo ${var:?message}
-bash: var: message
ct@ehbio:~$ var='sheng xin bao dian'
ct@ehbio:~$ echo ${var:6:3}
xin
2. 模式匹配操作符
${var#pattern} 从var 头部开始, 删除和pattern 匹配的最短模式串, 然后返回剩余串
${var##pattern} 从var 头部开始, 删除和pattern 匹配的最长模式串, 然后返回剩余串, basename path =
${path##*/}
${var%pattern} 从var 尾部开始, 删除和pattern 匹配的最短模式串, 然后返回剩余串, dirname path = ${path%/*}
${var%%pattern} 从var 尾部开始, 删除和pattern 匹配的最长模式串, 然后返回剩余串
${var/pattern/string} 用string 替换var 中和pattern 匹配的最长模式串
ct@ehbio:~$ var='sheng xin bao dian good'
ct@ehbio:~$ echo ${var/good/great}
sheng xin bao dian great
#比如获取fastq 文件的名字部分
for i in `ls *_1.fq.gz`; do j=${i/_1.fq.gz/}; echo "$j"; done
3.Shell 中条件和test 命令
Bash 可以使用[ … ] 结构或test 命令测试复杂条件
格式: [ expression ] 或test expression
返回一个代码, 表明条件为真还是为假, 返回0 为真, 否则为假。
注: 左括号后和右括号前空格是必须的语法要求
(1). 文件测试操作符
-d file: file 存在并且是一个目录
-e file: file 存在
-f file: file 存在并且是一个普通文件
-g file: file 存在并且是SGID(设置组ID) 文件
-r file: 对file 有读权限
-s file: file 存在并且不为空
-u file: file 存在并且是SUID(设置用户ID) 文件
-w file: 对file 有写权限
-x file: 对file 有执行权限, 如果是目录则有查找权限
-O file: 拥有file
-G file: 测试是否是file 所属组的一个成员
-L file: file 为符号链接
file1 –nt file2: file1 比file2 新
file1 –ot file2: file1 比file2 旧
ct@ehbio:~$ touch older
ct@ehbio:~$ touch newer
ct@ehbio:~$ if test -e older; then echo "older esists"; fi
older esists
ct@ehbio:~$ if test -s older; then echo "older is unempty"; fi
ct@ehbio:~$ if [ -s older ]; then echo "older is unempty"; fi
(2).字符串操作符
str1=str2 str1 和str2 匹配
str1!=str2 str1 和str2 不匹配
str1>str2 str1 大于str2
-n str str 的长度大于0(不为空)-z str str 的长度为0(空串),常用于判断必须的命令行参数是否传入
(3)整数操作符(ge: great equal; gt: great than)
var1 –eq var2 var1 等于var2
var1 –ne var2 var1 不等于var2
var1 –ge var2 var1 大于等于var2
var1 –gt var2 var1 大于var2
var1 –le var2 var1 小于等于var2
var1 –lt var2 var1 小于var2
if (( 3>2 )); then echo 'TRUE'; fi
TRUE
(4)逻辑操作符
!expr 对expr 求反expr1 && expr2 对expr1 与expr2 求逻辑与, 当expr1 为假时不再执行expr2
expr1 || expr2 对expr1 与expr2 求逻辑或, 当expr1 为真时不再执行expr2