2)脚本的书写规范 a)指定解释器,加版权等信息 #!/bin/bash # Date 2015-01-13 # Author:Created by hy # Mail:1020659371@qq.com # Function:This scripts function is MySQL backup # V2.1 b)不要使用中文注释 c)脚本以.sh为扩展名,例:script-name.sh d)成对的内容,一次性写出来,防止遗漏,如:{},[],'',``,""等 e)[]中括号两端有空格,例如:[ abc ] f)在写一些程序的时候我们要将一些语句块的前后首先对应写出来,例如: if语句格式一次完成: if 条件 then 语句(一般是语法写全了后中间再加语句) fi
for循环格式一次完成: for n in list do 语句(一般是语法写全了后中间再加语句) done 提示:while和until,case等语句也是一样。 g)学会缩进,让代码更易读 多行同时缩进的操作,ctrl+v-->选定要缩进的行-->按TAB(如果进行注释按#) -->按Esc
特殊的:在awk里面刚好相反 [iyunv@server2 ~]# awk 'BEGIN {print '$a'}' 192.1680.2-191.9680.20.2 [iyunv@server2 ~]# awk 'BEGIN {print "$a"}' $a 3.4全局变量和局部变量名的定义 a.脚本中的全局变量定义,如HY_HOME或HYHOME,在变量使用{}将变量括起或"${HY_HOME}" (当然这个不是必须的,这只是系统的一个规范) b.脚本中局部变量定义:存在于脚本函数(function)中的变量称为局部变量,要以local方式进行声明,使之只在本函数作用域内有效,防止变量在函数中的命名与变量外部程序中变量重名造成程序异常。下面是函数的变量定义例子: function TestFunc() { local i for((i=0;i128 命令被系统强制结束
3)对$?的说明
#!/bin/bash cd /etc tar zcf services.tar.gz ./services >&/dev/null [ $? -eq 0 ] && echo ok 如果我们在命令行执行会输出ok,如果我们不加打包时候的参数,将没有输出结果
4) $*和$@的区别例子 l $* 将所有的命令行所有参数视为单个字符串,等同于“$1$2$3” l $@ 将命令行每个参数视为单独的字符串,等同于“$1”,“$2”,“$3”。这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白。 实例: [iyunv@server2 ~]#set -- “I am” handsome hy. [iyunv@server2 ~]#echo $# 3 [iyunv@server2 ~]#for i in $*;do echo $i;done I am handsome hy. [iyunv@server2 ~]#for i in $@;do echo $i;done I am handsome hy. [iyunv@server2 ~]#for i;do echo $i;done //去掉in 变量列表,相当于in “$@” I am handsome hy. [iyunv@server2 ~]#for i in “$*”;do echo $i;done I am handsome hy. //这里不是说输出到一行,而是将所有的字符当成一个字符串
[iyunv@server2 ~]#echo ${hy:2:2} am [iyunv@server2 ~]#echo ${hy} | cut -c 1-4 //也可以使用cut来进行截取 I am [iyunv@server2 ~]#echo ${hy} | cut -c 3-4 am 从变量$hy开头开始删除最短匹配“I am”子串 [iyunv@server2 ~]#echo ${hy#I am} hy. [iyunv@server2 ~]#echo ${hy##I am h} y. 从变量$hy结尾开始删除最短匹配 [iyunv@server2 ~]#echo ${hy%hy.} I am [iyunv@server2 ~]#echo ${hy%I am} //这样就不行 I am hy. 从变量$hy结尾开始删除最长匹配 [iyunv@server2 ~]#echo ${hy%%hy} 使用etiantian字符串,来代替变量$hy第一个匹配的hy字符串 [iyunv@server2 ~]#echo ${hy/I am/you are} you are hy. 使用etiantian字符串,来代替变量$hy结尾开始匹配的hy字符串 [iyunv@server2 ~]#echo ${hy/%hy/server} I am server 使用 he is 字符串,来代替从变量$hy开头开始匹配I am字符串 [iyunv@server2 ~]#echo ${hy/#I am/he is} he is hy.