shell 需要注意的点
#!/bin/bash set -o nounset set -o errexit #set -o nounset #在默认情况下,遇到不存在的变量,会忽略并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。 #set -o errexit #在默认情况下,遇到执行出错,会跳过并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。 #封装函数 log () { local prefix="[$(date +%Y/%m/%d %H:%M:%S)]: " echo "${prefix} [email?protected]" >&2 } #转自 架构师之路
? ? 条件变量替换:? ?????? 当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.? (2) ${value:=word}? ?????? 与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将? ?????? word赋值给value? (3) ${value:?message}? ?????? 若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若? ?????? 此替换出现在Shell程序中,那么该程序将终止运行)? (4) ${value:+word}? ?????? 若变量以赋值的话,其值才用word替换,否则不进行任何替换? (5) ${value:offset}? (6) ${#value}? ?????? 变量的字符个数? (7) ${value#pattern}? (8) ${value%pattern}? ?????? ${value%%pattern}? (9) ${value/pattern/string}? ?????? ${value//pattern/string}? 注意:?上述条件变量替换中,除(2)外,其余均不影响变量本身的值? ?
shell字符串比较、判断是否为数字
?
二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.整数比较-eq???????等于,如:if [ "$a" -eq "$b" ]-ne???????不等于,如:if [ "$a" -ne "$b" ]-gt???????大于,如:if [ "$a" -gt "$b" ]-ge???????大于等于,如:if [ "$a" -ge "$b" ]-lt???????小于,如:if [ "$a" -lt "$b" ]-le???????小于等于,如:if [ "$a" -le "$b" ]<???????小于(需要双括号),如:(("$a" < "$b"))<=???????小于等于(需要双括号),如:(("$a" <= "$b"))>???????大于(需要双括号),如:(("$a" > "$b"))>=???????大于等于(需要双括号),如:(("$a" >= "$b"))字符串比较=???????等于,如:if [ "$a" = "$b" ]==???????等于,如:if [ "$a" == "$b" ],与=等价???????注意:==的功能在[[]]和[]中的行为是不同的,如下:???????1 [[ $a == z* ]]????# 如果$a以"z"开头(模式匹配)那么将为true???????2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true???????3???????4 [ $a == z* ]??????# File globbing 和word splitting将会发生???????5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true???????一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是.???????但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.!=???????不等于,如:if [ "$a" != "$b" ]???????这个操作符将在[[]]结构中使用模式匹配.<???????小于,在ASCII字母顺序下.如:???????if [[ "$a" < "$b" ]]???????if [ "$a" &; "$b" ]???????注意:在[]结构中"<"需要被转义.>???????大于,在ASCII字母顺序下.如:???????if [[ "$a" > "$b" ]]???????if [ "$a" &; "$b" ]???????注意:在[]结构中">"需要被转义.???????具体参考Example 26-11来查看这个操作符应用的例子.-z???????字符串为"null".就是长度为0.-n???????字符串不为"null"???????注意:???????使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z???????或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可???????以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |