执行脚本的时候,往一个文件里自动输入N行内容。
如果是少数的几行内容,可以用echo追加方式;
[root@work1 ~]# echo "show global status where Variable_name='Uptime';" | mysql -N | awk '{print $2}'
85126
#
--skip-column-names, -N
Do not write column names in results.
如果是很多行,就可以使用EOF结合cat命令进行行内容的追加。
注意,
1.紧挨着EOF 后面的,是一条shell命令[可选]。只有在出现输入提示符">"(>表示新行,在脚本中不用输入>只需另起新行)后输入的内容才正式为EOF匹配的内容段。
2.若文件不存在,EOF命令中会自动创建。
例,
cat << EOF >test.sh
apple
1234567890
very,good!
EOF
等价于
cat >test.sh << EOF
apple
1234567890
very,good!
EOF
解释:
登录mysql库(mysql $DATABASE),查询user表(通过here-document方式追加select user from $TABLE;),然后|管道给tail,tail 输出从第2行开始的记录
[root@work1 mysql]# TABLE=user
[root@work1 mysql]# DATABASE=mysql
[root@work1 mysql]# depts=`mysql $DATABASE <<aaa | tail -n +2
> select user from $TABLE;
> aaa`
[root@work1 mysql]# echo $depts
root root zabbix root zabbix
[root@work1 mysql]#
1、在命令行环境下,使用cat <<EOF 和 cat <<-EOF,两个都是获取stdin,并在EOF处结束stdin,输出stdout。
在我们使用cat <<EOF时,我们输入完成后,需要在一个新的一行输入EOF结束stdin的输入。EOF必须顶行写,前面不能用制表符或者空格。比如,下面的语句就不会出错:
例1:
<span style="font-size:18px;">cat <<EOF
Hello,world!
EOF</span>
如果结束分解符EOF前有制表符或者空格,则EOF不会被当做结束分界符,只会继续被当做stdin来输入。而<<-就是为了解决这一问题:
例2:
cat <<-EOF
Hello,world!
EOF
上面的写法,虽然最后的EOF前面有多个制表符和空格,但仍然会被当做结束分界符,表示stdin的结束。
这就是<<和<<-的区别。
网友评论