K&

BASH [options] [file]

 

-e  每条指令执行后,都用#? 去判断他的返回值,0就是正确执行,非零就是执行有误,使用后可以不用自己写代码去判断返回值,非零,脚本就会退出。

-n  功能测试语法是否有误,不会实际执行命令

-c  若用-c参数,则bash从字符串中读入命令,如果字符串后还有变量就被设定为从$0开始的位置参数

 

 

-x  把脚本执行的结果显示出来

   前面有“+”号的行是shell脚本实际执行的命令
   前面有“++”号的行是执行trap机制中指定的命令  (trap 中断机制  用来定义指定信号如何处理脚本就是kill那些信号)
   其它的行则是输出信息。

-v  执行脚本之前,把脚本内容打印出来

-i   若用-i参数,则bash是交互的。

-s  若用-s参数,则bash从标准输入中读入命令(在执行完-c带的命令之后。)直到输入exit

-   单一的号表明参数执行完毕,并且屏蔽此后所跟参数,后面的所有变量都被看作是文件名

-norc  如果bash是交互的,则不执行个人初始化文件:-/.bashrc,如果bash作为sh来运行,这个参数缺省是关闭的

 

 

${}  界定变量边界,并引用变量取值

${#}  能取变量长度

$(COMMAND)  shell扫描命令行,扫描到这个结构就会把括号内命令执行一次,标准输出到调用的命令上,命令中错误输出不会被替换,只替换标准输出

()与{}  圈定范围,可以执行一组命令用分号隔开

()只是对一串命令重新开一个子shell进行执行,{}对一串命令在当前shell执行  当前termial
()最后一个命令可以不用分号,{}最后一个命令必须要用分号
()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令

${var:?string}  替换规则:若变量var不为空,则用变量var的值来替换${var:?string}

        若变量var为空,则把string输出到标准错误中,并从脚本中退出。

        可利用此特性来检查是否设置了变量的值

$((exp))       POSIX标准的扩展计算这种计算是符合C语言的运算符,也就是说只要符合C的运算符都可用在$((exp)),包括三目运算符

        注意:这种扩展计算是整数型的计算,不支持浮点型和字符串等若是逻辑判断,表达式exp为真则为1,假则为0

 

 

${}

 

 

infra-etcd-cluster-1

HOSTNAME=$(hostname)

       命令                                        解释                                            结果

${HOSTNAME#*-}                          拿掉第一个 - 及其左边的字符串                          etcd-cluster-1

SET_ID=${HOSTNAME#*-}

# echo $SET_ID
etcd-cluster-1


       命令                                        解释                                            结果

${HOSTNAME##*-}                         拿掉最后一个 - 及其左边的字符串                                1

SET_ID=${HOSTNAME##*-}

# echo $SET_ID
1


       命令                                        解释                                            结果

${HOSTNAME%-*}                          拿掉最后一个 - 及其右边的字符串                        infra-etcd-cluster

SET_ID=${HOSTNAME#*-}

# echo $SET_ID
infra-etcd-cluster


       命令                                        解释                                            结果

${HOSTNAME%%-*}                         拿掉第一个 - 及其右边的字符串                                infra

SET_ID=${HOSTNAME#*-}

# echo $SET_ID
infra

看到过一种记忆方法很有趣


以$为分界限,在左侧的#就是左删除,在右侧的%就是右删除


单一符号最小匹配就是第一,两个符号就是最大匹配就是最后一个
*用来匹配要删除的部分
类似与-的那个位置作为分隔符,在星号左侧为删除-左侧的字符串,在星右侧为删除右侧的字符串



${file:0:5}               提取最左边的 5 个字节               
${file:5:5}               提取第 5 个字节右边的连续 5 个字节        
${file/xxx/path}            将第一个 xxx 替换为 path             
${file//xxx/path}        将全部 xxx 替换为 path              
${#file}              获取变量长度          
 
 
posted on 2021-04-25 19:03  K&  阅读(323)  评论(0编辑  收藏  举报