加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell 需要注意的点

发布时间:2020-12-15 21:13:21 所属栏目:安全 来源:网络整理
导读:#!/bin/bashset -o nounsetset -o errexit#set -o nounset#在默认情况下,遇到不存在的变量,会忽略并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。#set -o errexit#在默认情况下,遇到执行出错,会跳过并继续执行,而这
#!/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
}
#转自 架构师之路

  

?

?

条件变量替换:?
?? Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换?
条件放在{}中.?
(1) ${value:-word}?

?????? 当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.?

(2) ${value:=word}?

?????? 与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将?

?????? word赋值给value?

(3) ${value:?message}?

?????? 若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若?

?????? 此替换出现在Shell程序中,那么该程序将终止运行)?

(4) ${value:+word}?

?????? 若变量以赋值的话,其值才用word替换,否则不进行任何替换?

(5) ${value:offset}?
?????? ${value:offset:length}?
?????? 从变量中提取子串,这里offset和length可以是算术表达式.?

(6) ${#value}?

?????? 变量的字符个数?

(7) ${value#pattern}?
?????? ${value##pattern}?
?????? 去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配?
?????? #与##的区别在于一个是最短匹配模式,一个是最长匹配模式.?

(8) ${value%pattern}?

?????? ${value%%pattern}?
?????? 于(7)类似,只是是从value的尾部于pattern相匹配,%与%%的区别与#与##一样?

(9) ${value/pattern/string}?

?????? ${value//pattern/string}?
?????? 进行变量内容的替换,把与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???????或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可???????以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读