目录
3 在shell脚本中实现try ... catch... 功能比较 && 和 || 的不同
1 重定向
1.1 输出重定向
(1) >>, 〉 输出重定向
输出重定向即输出不在终端上,而是输出到文件中去或其它
>>file 的意思是如果重定向的文件不存在,则重新创建文件,并将信息在文件的末尾插入; 如果文件已经存在, 则直接在末尾插入
>file 的意思是如果重定向的文件不存在,则重新创建文件,并将信息在文件的末尾插入; 如果文件已经存在, 则重建文件后再插入
(2)<, << 输入重定向 :
输入重定向即输入不从键盘读入,而是从文件输入或其它
2 实现既定向输出又打印在终端 ——tee ,命令
tee命令读取标准输入,把这些内容同时输出到标准输出和(多个)文件中。
用法示例:
格式:tee file1
类似于>
输出到标准输出的同时,保存到文件file中。如果文件不存在,则创建;如果已经存在,则覆盖之。
格式:tee -a file1
类似于>>
输出到标准输出的同时,追加到文件file中。如果文件不存在,则创建;如果已经存在,就在末尾追加内容,而不是覆盖。
格式:tee file1 file2
重定向到文件file1和file2中,tee可以重定向到多个文件。
3 在shell脚本中实现try ... catch... 功能
比较 && 和 || 的不同
&& 的特点:
func1 && func2 func1 执行成功后才会func2
|| 的特点:
func1 || func2 func1 执行失败后才会func2
因此, 通过以上的比较功能可以使用 || 实现try ... catch .... 功能。
4 shell 标准输入输出
在shell中,每个进程都和三个系统文件相关联:标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0,1和2
使用如下:2>>log 将标准错误信息重定向到文件log中
5 shell 函数
格式如下:
func(){
echo "hello, world"
}
调用如下:
func
传参:
func params1, params2
6 shell 输出
echo 可以输出到控制台
例如:
echo "hello, world"
7 示例
使用以上功能实现一个可以记录程序执行成功和报错信息的程序
#函数1
func1(){
create table tem(ip, int) #这条建表语句会报错
}
#函数2
#func1 执行成功,则把执行成功的信息输出到log文件中,并记录执行日期
func2(){
date=`date "+%Y-%m-%d %H:%M:%S"` #获取时间信息
echo $date | tee -a log #将日期输出到日志 ,其中 | 的含义是前面的echo 的输出 date,作为后面的tee的输入
echo "sucess action" | tee -a log #将执行成功信息输出到日志
}
func3(){
{
func1 2>tem #将函数的标准错误输出重定向到一个临时文件中
} && {
func2
} ||{
var = $(cat tem) #从临时文件中读取错误信息
date=`date "+%Y-%m-%d %H:%M:%S"` #获取执行信息
echo $date | tee -a log #将日期输出到日志
echo $var | tee -a log #将执行错误信息输出到日志
}
}
#执行func3
func3