1. 跨脚本文件调用
需要在文件的开始加上
sh /dev/xxxxx.sh
或者
. /dev/xxxxxx.sh
2. $? $# $1 $@ $*的含义
变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体。
以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
3. 判断语句中常用的知识点
在linux 中 命令执行状态:0 为真,其他为假
第一个条件为假时,第二条件不用再判断,最终结果已经有;
第一个条件为真时,第二条件必须得判断;
逻辑与: &&
逻辑或: ||
逻辑非: !
数值比较符:
-eq //等于(equal)
-ne //不等于( not equal)-gt //大于( greater than)
-lt //小于( less than)
-ge //大于等于( greater or equal)
-le //小于等于(less or equal)
文件比较符:
-e filename 如果 filename存在,则为真 [ /var/log/syslog ]
-d filename 如果 filename为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename可执行,则为真 [ -L /usr/bin/grep ]
filename1-nt filename2 如果 filename1比 filename2新,则为真 [ /etc/services -nt /etc]
filename1-ot filename2 如果 filename1比 filename2旧,则为真 [ /boot-ot /bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string长度非零,则为真 [ -n "$myvar" ]
string1= string2 如果 string1与 string2相同,则为真 [ "$myvar" = "one two three"]
string1!= string2 如果 string1与 string2不同,则为真 [ "$myvar" != "one two three" ]4. 获取当前时间
ttime=`date +"%Y-%m-%d %H:%M:%S"`
5. 写日志函数
clog(){
c_time=`date +"%Y-%m-%d %H:%M:%S"`
echo "${c_time}" | tr -d '\n'
echo $*
}
需要打印日志调用时:
clog "Hello world!"
6. 返回函数的结果给变量
func(){
echo "Hello world!"
}
var=$(func) 或者 var=`func`
7. EOF的使用
8. sed
9. awk
10. set +e/-e
set -e # Exit the script if an error happens
脚本A
set +e # don't bail out of bash script if the cache doesn't exist
脚本B
set -e # back to regular "bail out on error" mode
脚本C
在上面这个脚本里面,A 和 C 中的 脚本 执行的时候 如果出现了返回值为非零,整个脚本就会立即退出。
如果脚本B中如果出现了返回值为非零将会继续执行下面的脚本C 。
无论是+e还是-e,它只是对后续的脚本起作用,不对前面的脚本和整个脚本文件负责。
值得一说的是set命令的-e参数,linux自带的说明如下:" Exit immediately if a simple command exits with a non-zero status."也就是说,在"set -e"之后出现的代码,一旦出现了返回值非零,整个脚本就会立即退出。有的人喜欢使用这个参数,是出于保证代码安全性的考虑。