Linux执行定向文件,linux重定向:在shell脚本中固定周期执行命令并将输出信息自动输出到文件中保存...

0. Shell脚本中,变量名和等号之间不能有空格!!!

1. 按固定周期执行命令:

while true

do

cmd(shell 命令)

sleep x(x为秒数)

done

n=0;

while(($n<=100));

do

top -n 1;

n=$((n + 1));

sleep 10;

done

2.获取当前时间

date "+%Y-%m-%d %H:%M:%S"

按照%Y-%m-%d %H:%M:%S格式输出当前时间

输出如下所示

322c910692635f0a3cfaf4acae438846.png

3. 重定向

sh batchjob.sh 2>&1 | tee mylog.log

其中sh batchjob.sh:表示要执行的shell脚本;0,1,2:在linux分别表示标准输入、标准输出和标准错误信息输出。

tee命令

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件

输入输出重定向之:''

''分别用来支持linux中的输入输出重定向,其中''支持输出重定向。

'

sh test.sh < hadoop-hadoop-jobtracker-brix-00.out,将hadoop-hadoop-jobtracker-brix-00.out的内容作为test.sh的输入

'>':将内容全局覆盖式的加入文件,相当于删除该文件并重新建立该文件,再写入的效果

ls * > test.txt ,将ls * 的所有信息输出到文件test.txt中

'>!':如果存在则覆盖

'>&':执行时屏幕上所产生的任何信息写入指定的文件中

'>>':追加到文件中

'>>&':屏幕上的信息追加到文件中

标准输入输出

在 Linux 系统中:标准输入(stdin)默认为键盘输入;标准输出(stdout)默认为屏幕输出;标准错误输出(stderr)默认也是输出到屏幕(上面的 std 表示 standard)。在 BASH 中使用这些概念时一般将标准输出表示为 1,将标准错误输出表示为 2。下面我们举例来说明如何使用他们,特别是标准输出和标准错误输出。

4. 定义和使用变量

outputfilename=`date '+%Y%m%d%H%M%S'`.csv //定义变量

ls >> ${outputfilename} //使用变量

5. echo显示信息

#!/bin/bash

echo "write to file." //在标准输出显示数据

echo "iput your name:"

read y_name //从标准输入读取内容

echo "Hello,${y_name}" > f_users.bat //使用了变量,使用了重定向

812eb57780d477ed91b083678f54c262.png

c8dd91c6240899c73e6743fce895bf24.png

6. shell脚本中执行命令

每个命令之间用;隔开

说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。

每个命令之间用&&隔开

说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。

例如:cat /etc/redhat-release && yum -y update && yum list | grep installed > installed.txt  三个命令

每个命令之间用 || 隔开

说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。

7. shell脚本中在后台执行命令nohup和 >/dev/null 2>&1

nohup表示永久运行。&表示后台运行

在应用Unix/Linux时,我们一般想让某个程序在后台运行,该命令的一般形式为:nohup command &。在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

nohup command > myout.file 2>&1 &

在上面的例子中,输出被重定向到myout.file文件中。

>/dev/null 2>&1

/dev/null 代表空设备文件,> 代表重定向到哪里,>/dev/null 2>&1就是不输出任何信息到终端,说白了就是不显示任何信息。

1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"

2 表示stderr标准错误

& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

nohup ./mqnamesrv >/home/cxb/mqnamesrv.out 2>&1 &

即标准输出到mqnamesrv.out中,接着,标准错误输出重定向等同于标准输出,输出到同一文件中。

8. 在shell中执行命令,并将执行的结果输出到文件

#!/bin/sh

cmd=`ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'`

datetime=$(date '+%Y-%m-%d %H:%M:%S')

aaa=${cmd}

FILE="/alidata/logs/"$(date '+%Y-%m-%d')"_log.txt"

echo $datetime >> $FILE //将命令datetime运行的结果输出到文件

echo $aaa >> $FILE //将命令aaa运行的结果输出到文件

echo "$aaa" >> $FILE //将字符串aaa输出到文件

echo aaa >>$FILE //将字符串aaa输出到文件

echo "------------------------------------" >> $FILE

ps是执行的命令 使用 ` 符号(Esc下面那个)扩起来 .

FILE.txt 是写入的文件. 没有规定目录会创建文件到当前目录

echo "$aaa"   是输出到文件的时候保持格式.  echo $aaa 则内容为一行

9. Linux—shell中$、$(( ))、$( )、``与${ }的区别

$( ) 与 ` ` (反引号,不是单引号) 在 bash shell 中都是用来做命令替换用的。

[root@localhost ~]# echo today is $(date "+%Y-%m-%d")

today is 2017-11-07

[root@localhost ~]# echo today is `date "+%Y-%m-%d"`

today is 2017-11-07

$var与${var}是用于变量替换的,一般情况下是没有区别的,但是用${ }会比较精确的界定变量名称的范围。

[root@localhost ~]# A=Linux

[root@localhost ~]# echo $AB #表示变量AB

[root@localhost ~]# echo ${A}B #表示变量A后连接着B

LinuxB

10. 小结

后台符号 &一定要放在整个命令最后

重定向>,>>一定紧跟着重定向文件

如果是 文件输出 1 stdout,2 stderr 要重定向到别的文件,也是紧跟>,>>符号。

如果想让stderr也跟 stdout一样输出到文件,使用 /usr/local/bin/cmd >file 2>&1,同 /usr/local/bin/cmd 1>file2>&1 是一样的意思。

11. 将批量命令执行的结果输出到日志中

#!/bin/bash

set -xv

exec 1>mylog 2>&1

free

df -h

pwd

第二行是打开模式开关。 -v:显示shell所读取的输入值。-x:执行指令后,会先显示该指令及所下的参数

第三行 exec命令用于调用并执行指令的命令。

exec命令通常用在shell脚本程序中,可以调用其他的命令;1> mylog  是将标准输出重定向到mylog文件中;2>&1 是将标准错误定向到标准输入,一起定向到mylog中,也就是说,标准输入和标准输出都会到mylog文件中

执行上面的脚本后,就会将后面三条命令free, df -h, pwd命令的执行结果全部生产到mylog文件中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值