Shell 重定向,计算命令执行时间

标准输入输出

一般情况下, 每个Linux 命令运行时都会打开三个文件:

        标准输入文文件(/dev/stdin): 文件描述符为0, linux 程序默认从stdin 读取数据

        标准正确输出文件(/dev/stdout): 文件描述符为1, linux 程序默认将正确输出写入stdout中

        标准错误输出文件(/dev/stderr): 文件描述符为2, linux 程序默认会将错误输出写入stderr 文件夹中

csdn1013@LAPTOP-QNFOQI5C:~$ ll /dev/std*

lrwxrwxrwx 1 root root 15 Jul  5 22:49 /dev/stderr -> /proc/self/fd/2

lrwxrwxrwx 1 root root 15 Jul  5 22:49 /dev/stdin -> /proc/self/fd/0

lrwxrwxrwx 1 root root 15 Jul  5 22:49 /dev/stdout -> /proc/self/fd/1
命令 > 文件以覆盖方式, 将正确输出写入文件中
命令 >> 文件以追加方式, 将正确输出写入文件中
命令 2> 文件以覆盖方式, 将命令错误输出写入文件中
命令 2>> 文件 以追加方式, 将命令错误输出写入文件中
命令 &> 文件以覆盖方式, 将命令正确&错误输出写入文件中
命令 &>> 文件以追加方式,将命令正确&错误输出写入文件中
命令 >> 文件1 >> 文件2以追加方式,将命令正确输出写入文件1,将错误输出写入文件2

输入重定向举例:

使用小于号

csdn1013@LAPTOP-QNFOQI5C:~$ wc < test1

  4  26 148

将文本文件重定向到wc命令,得到文件的行,词数和字节的计数。这个例子表示特色test1文件有4行,26个单词,148字节

输出重定向举例:

Bash shell中用大于号(>)将命令的输出发送到一个文件中。

如果输出文件已经存在,重定向操作符会将新命令的结果覆盖文件的原有内容

csdn1013@LAPTOP-QNFOQI5C:~$ date > test1

csdn1013@LAPTOP-QNFOQI5C:~$ cat test1

Thu Jul  8 22:04:09 CST 2021

csdn1013@LAPTOP-QNFOQI5C:~$ ls -l > test1

csdn1013@LAPTOP-QNFOQI5C:~$ cat test1

total 0

drwxr-xr-x 1 csdn1013 csdn1013 4096 Jul  8 22:03 python

如果想追加输出内容到文件,可以使用双大于号(>>)追加数据

csdn1013@LAPTOP-QNFOQI5C:~$ date > test1

csdn1013@LAPTOP-QNFOQI5C:~$ ls -l >> test1

csdn1013@LAPTOP-QNFOQI5C:~$ cat test1

Thu Jul  8 22:07:11 CST 2021

total 0

drwxr-xr-x 1 csdn1013 csdn1013 4096 Jul  8 22:05 python

-rw-r--r-- 1    csdn1013 csdn1013   29 Jul  8 22:07 test1

确定一段命令的执行时间:

将执行命令前后的时间戳相减得到执行的时间

#!/bin/bash

start_time=`date +%s`

ls -l

ls -al

sleep 10

stop_time=`date +%s`



delta_time=$[ stop_time - start_time ]

echo "start_time ====> stop_time: $delta_time"

执行结果:

csdn1013@LAPTOP-QNFOQI5C:~$ ./date.sh

total 0

-rwxrwxrwx 1 csdn1013 csdn1013  165 Jul  8 23:00 date.sh

drwxr-xr-x 1 csdn1013 csdn1013 4096 Jul  8 22:05 python

-rw-r--r-- 1 csdn1013 csdn1013  148 Jul  8 22:07 test1

total 24

drwxr-xr-x 1 csdn1013 csdn1013 4096 Jul  8 23:00 .

drwxr-xr-x 1 root     root     4096 Jul  1 23:44 ..

-rw------- 1 csdn1013 csdn1013   92 Jul  5 22:11 .bash_history

-rw-r--r-- 1 csdn1013 csdn1013  220 Jul  1 23:44 .bash_logout

-rw-r--r-- 1 csdn1013 csdn1013 3771 Jul  1 23:44 .bashrc

drwxr-xr-x 1 csdn1013 csdn1013 4096 Jul  1 23:44 .cache

drwx------ 1 csdn1013 csdn1013 4096 Jul  1 23:44 .config

-rw-r--r-- 1 csdn1013 csdn1013  807 Jul  1 23:44 .profile

-rw------- 1 csdn1013 csdn1013  330 Jul  6 00:10 .python_history

-rw-r--r-- 1 csdn1013 csdn1013    0 Jul  1 23:45 .sudo_as_admin_successful

-rw------- 1 csdn1013 csdn1013 9555 Jul  8 23:00 .viminfo

-rwxrwxrwx 1 csdn1013 csdn1013  165 Jul  8 23:00 date.sh

drwxr-xr-x 1 csdn1013 csdn1013 4096 Jul  8 22:05 python

-rw-r--r-- 1 csdn1013 csdn1013  148 Jul  8 22:07 test1

start_time ====> stop_time: 10

date命令返回系统当前的日期,而date +%s是将当前的系统时间转化为时间戳

csdn1013@LAPTOP-QNFOQI5C:~$ date
Thu Jul  8 23:24:46 CST 2021
csdn1013@LAPTOP-QNFOQI5C:~$ date +%s
1625757892

#注意date与+之间有空格,+与%s之间没有空格

执行一段命令,直到命令执行出现错误, 并且打印执行次数:

#!/bin/bash
i=0

while true
do

#ls -l可以换成你需要执行的其他命令,比如在做测试时可能会导致板卡不稳定状态而出现错误状态的命令
#可以在测试稳定性的时候,用这个简单的思路
#$?表示执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
    ls -l

    if [ 0 != $? ]; then

        break

    fi

    let i++

    echo "=======$i test======="

done

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值