阻止命令输出
有时候可能不想显示脚本的输出,可以将STDERR或者STDOUT重定向给一个叫做null文件的特殊文件,该文件内部什么都没有。shell输出到null文件的任何数据都不会保存,全部都被丢掉了。
在linux系统上null文件的标准位置是/dev/null。重定向到该位置的任何数据都会被丢掉。
普通输出重定向到/dev/null
演示代码如下:
也可以使用输出重定向来删除日志文件,此方法是清理过期日志文件非常好的办法
演示代码如下:
普通输出重定向到/dev/null
演示代码如下:
ls -l 1> /dev/null
错误输出重定向到/dev/null
演示代码如下:
ls -l not_exist_file 2> /dev/null
普通输出和错误输出重定向到/dev/null
演示代码如下:
ls -l not_exist_file &> /dev/null
昨天和今天的文章中都整理了重定向的语法,下面用一个例子演示一下重定向稍微高级点的用法。
有一个members.csv文件,文件内容如下:
Mayun,male,56,HangzhouMahuateng,male,54,ShenzhenWangfei,female,45,Beijing
现在需要读取该文件内容,然后创建insert语句,将数据插入数据库。
思考片刻。。。
操作过程如下:
脚本代码如下:
#!/bin/bash# read .csv file and create INSERT statements for MYSQL outfile='members.sql'IFS=','while read name gender age locationdo cat >> $outfile << EOF INSERT INTO members (name, gender, age, location) VALUES('$name', '$gender', '$age', '$location');EOFdone < $1
分析一下上面的脚本代码
1、最后一行的done < $1
$1代表第一个命令行参数,它指明了待读取数据的文件
2、IFS=','
read语句会使用IFS字符解析读入的文本,这里将IFS指定为逗号
3、cat >> $outfile << EOF
这条语句中的输出追加重定向>>将cat命令的输出追加到由$outfile变量指定的文件中;
输入重定向<
4、 INSERT INTO members (name, gender, age, location) VALUES ('$name', '$gender', '$age', '$location');
上面的语句定义了一个标准的sql INSERT语句,其中的变量会read语句存入的。