CN101369250A - 一种基于Shell的带日志执行方法 - Google Patents
一种基于Shell的带日志执行方法 Download PDFInfo
- Publication number
- CN101369250A CN101369250A CNA2008102008854A CN200810200885A CN101369250A CN 101369250 A CN101369250 A CN 101369250A CN A2008102008854 A CNA2008102008854 A CN A2008102008854A CN 200810200885 A CN200810200885 A CN 200810200885A CN 101369250 A CN101369250 A CN 101369250A
- Authority
- CN
- China
- Prior art keywords
- variable
- execution
- shell
- control desk
- command
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
一种基于Shell的带日志执行方法,包括:步骤一:将Shell执行脚本中给定的要输出的内容或者命令字符串放入一变量中;步骤二:将所述变量中的内容可以根据不同的参数选择是否出到控制台,是否在显示器上显示出来;如果该变量中存放的是普通字符串,则转步骤三;如果该变量中存放的是命令字符串,则转步骤四;步骤三:普通字符串处理模块处理所述的普通字符串;步骤四:命令字符串处理模块执行所述的命令字符串,并处理命令执行的输出。基于本发明,可以方便的实现大型脚本程序的运行与日志跟踪,并且在控制台给出合理的有效的用户提示。
Description
技术领域
本发明涉及Linux Shell脚本,特别是一种基于Shell的带日志执行方法。
背景技术
Shell被广泛应用于Linux/Unix操作系统,常用来批处理完成特定的任务,具有编写简单、扩展性灵活性好等优点。现在常用的Shell脚本执行方法中,对脚本的运行及其输出控制比较单一,要么仅仅能把脚本的输出写入控制台,要么只能写入日志文件。
如果脚本的输出全部都送到控制台,则用户很难在繁多的信息中找到自己所需要的信息,而如果全部输出到日志文件的话,用户还得需要去日志文件中寻找程序的运行信息。这两种方法都不够灵活,不能提供给用户足够精简的有效的控制台信息。
发明内容
为克服上述已有技术的不足,本发明要解决的技术问题是提供一种基于Shell的带日志执行方法,使用该方法可以灵活的控制要执行的命令、命令的输出是否显示到控制台以及日志文件。
为解决上述技术问题,本发明的技术方案是:
一种基于Shell的带日志执行方法,应用于Linux和Unix平台,该方法实施依据的硬件平台为Linux/Unix所支持的硬件平台,该硬件平台包括CPU、存储设备、键盘、显示器,该方法包括如下步骤:
步骤一:将Shell执行脚本中给定的要输出的内容或者命令字符串放入一变量中;
步骤二:将所述变量中的内容可以根据不同的参数选择是否出到控制台,是否在显示器上显示出来;
如果该变量中存放的是普通字符串,则转步骤三;如果该变量中存放的是命令字符串,则转步骤四;
步骤三:普通字符串处理模块处理所述的普通字符串;
步骤四:命令字符串处理模块执行所述的命令字符串,并处理命令执行的输出。
所述的给定的要输出的内容是要输出的文字信息,存入变量MSG中。
所述的给定的要输出的内容是要执行的命令,存入变量CMD中。
所述的基于Shell的带日志执行方法,还包括以下步骤:
步骤A:将执行的命令的输出结果输出到控制台,并在显示器上显示出来;
步骤B:将所述命令的输出结果记录到位于存储器或内存中的日志文件中。
所述的基于Shell的带日志执行方法,还包括以下步骤:
步骤a:将脚本执行的步骤标题存入变量TITLE中;
步骤b:在全局变量Step中保存每次执行的步骤编号;
步骤c:将本次执行步骤的编号以及变量TITLE中的字符串显示到控制台供用户参考,并且将该编号的值增加1。
该方法实施依据的硬件平台为x86、AMD、ARM;所述的存储设备是NANDFlash、或T-Flash。
与现有技术相比,本发明的有益效果是:
本发明带日志执行方法对要执行的命令以及命令的输出进行分类、分级,可以灵活的控制要执行的命令、命令的输出是否显示到控制台以及日志文件。基于本发明,可以方便的实现大型脚本程序的运行与日志跟踪,并且在控制台给出合理的有效的用户提示。
附图说明
图1是本发明在控制台和日志文件中同时显示记录一段文字的示意图。
图2是本发明在控制台和日志文件中显示并记录执行的命令,并把该命令的输出内容也记录到控制台和日志文件中的示意图。
图3是本发明在控制台中不显示执行的命令,但是显示该命令执行的输出信息,同时将程序运行的输出信息记录到日志文件中的示意图。
图4是本发明记录Shell脚本执行的步骤编号以及内容的示意图。
图5是本发明带日志执行方法对普通字符串处理的流程图。
图6是本发明带日志执行方法对命令字符串处理的流程图。
具体实施方式
下面结合附图和实施例对本发明的具体实施方式做进一步详细的说明,但不应以此限制本发明的保护范围。
本发明基于Shell的带日志执行方法,应用于Linux和Unix平台,该方法实施依据的硬件平台为Linux/Unix所支持的所有硬件平台,如x86、AMD、ARM;这些硬件平台所需要包括的基本硬件为CPU、存储设备(如NAND Flash、T-Flash等)、键盘、显示器。
该方法包括如下步骤:
步骤一:将Shell执行脚本中给定的要输出的内容或者命令字符串放入一变量中;所述的给定的要输出的内容是要输出的文字信息,存入变量MSG中。所述的给定的要输出的内容是要执行的命令,存入变量CMD中。
命令字符串会得到执行,并在执行后输出一些信息,这些信息相当于“Shell执行脚本中给定的要输出的内容”。
步骤二:将所述变量中的内容可以根据不同的参数选择是否出到控制台,是否在显示器上显示出来;
如果该变量中存放的是普通字符串,则调用普通字符串处理模块,调用普通字符串处理模块时传入两个控制参数:参数1、是否将该普通字符串显示到控制台,参数2、是否将该普通字符串记录到日志文件,转步骤三;
如果该变量中存放的是命令字符串,则调用命令字符串处理模块,调用命令字符串处理模块时传入四个控制参数:1、是否将该命令字符串显示到控制台,2、是否将该命令字符串记录到日志文件,3、是否将该命令的执行结果显示到控制台,4、是否将该命令的执行结果记录到日志文件,转步骤四;
步骤三:请参阅图5。普通字符串处理模块接收到普通字符串之后,如果参数1为True,则将该普通字符串显示到控制台;如果参数1为False,则不对该字符串进行显示到控制台的处理;如果参数2为True,则将该普通字符串记录到日志文件;如果参数2为False,则不对该字符串进行记录到日志文件的处理;
步骤四:请参阅图6。命令字符串处理模块接收到命令字符串之后,执行该命令,并将命令执行的输出做如下处理:如果参数1为True,则将该命令字符串显示到控制台;如果参数1为False,则不对该命令字符串进行显示到控制台的处理;如果参数2为True,则将该命令字符串记录到日志文件;如果参数2为False,则不对该命令字符串进行记录到日志文件的处理;如果参数3为True,则将该命令字符串的执行结果显示到控制台;如果参数3为False,则不对该命令的输出字符串进行显示到控制台的处理;如果参数4为True,则将该命令的输出字符串记录到日志文件;如果参数4为False,则不对该命令的输出字符串进行记录到日志文件的处理;
本发明基于Shell的带日志执行方法,还包括以下步骤:
步骤A:将执行的命令的输出结果输出到控制台,并在显示器上显示出来;
步骤B:将所述命令的输出结果记录到位于存储器或内存中的日志文件中。
本发明方法还包括以下步骤:
步骤a:将脚本执行的步骤标题存入变量TITLE中;
步骤b:在全局变量Step中保存每次执行的步骤编号;
步骤c:将本次执行步骤的编号以及变量TITLE中的字符串显示到控制台供用户参考,并且将该编号的值增加1。
下面以不同的Shell函数传递参数以及tee命令实现的四个函数来说明本发明。
1、在控制台Console和日志文件中同时显示、记录一段文字。请参阅图1。
处理步骤:
1)对于一段要处理字符串,例如“Begin upload”,将该字符串放入变量MSG,即MSG=“Begin upload”。
2)将要输出的日志文件名称放入变量LOG_FILE:
LOG_FILE=${TARGET_REVISION_DIR}/make.log
3)将是否记录操作时间的标记放入LOG_TIME,如果需要记录操作时间,则LOG_TIME=1,否则设置LOG_TIME为0。
4)调用自定义函数echo_tee:
echo_tee$MSG
echo_tee函数的功能是将MSG中的字符串同时显示到控制台及日志文件LOG_FILE。LOG_FILE必须是一个Linux文件系统中可写的文件路径,该文件可以存在真实的物理磁盘中,也可以是在虚拟内存中。
为了记录该操作执行的时间,echo_tee函数还要根据LOG_TIME的值来决定是否把当前时间也同时显示到控制台或者记录到LOG_FILE中,实现方式如下:
if((1==$LOG_TIME));then
echo[`date″+%H:%M:%S″`]$@|tee-a${LOG_FILE}
else
echo$@|tee-a${LOG_FILE}
fi
5)补充说明
echo_tee函数的功能有很好的扩充性,不光可以控制显示特定字符串到控制台或者日志文件中,还可以扩充将文字内容写入数据库或者转发给Syslog。
2、在Console和日志文件中显示并记录执行的命令,并把该命令的输出内容也记录到Console和日志文件中。请参阅图2。
处理步骤:
1)对于一段要执行的命令,例如“ls/opt/sp3000”,将该字符串放入变量CMD,即CMD=“ls/opt/sp3000”。
2)将要输出的日志文件名称放入变量LOG_FILE:
LOG_FILE=${TARGET_REVISION_DIR}/make.log
3)将是否记录操作时间的标记放入LOG_TIME,如果需要记录操作时间,则LOG_TIME=1,否则设置LOG_TIME为0。
4)调用自定义函数echo_run_tee:
echo_run_tee $CMD
echo_tee函数的功能是执行CMD中的命令,将该命令同时显示到控制台及日志文件LOG_FIL,并且把该命令的输出同时显示到控制台及日志文件LOG_FILE。LOG_FILE必须是一个Linux文件系统中可写的文件路径,该文件可以存在真实的物理磁盘中,也可以是在虚拟内存中。
为了记录该操作执行的时间,echo_tee函数还要根据LOG_TIME的值来决定是否把当前时间也同时显示到控制台或者记录到LOG_FILE中,实现方式如下:
if((1==$LOG_TIME));then
echo[`date″+%H:%M:%S″`Exec]:$@|tee-a${LOG_FILE}
else
echo[Exec]:$@|tee-a${LOG_FILE}
fi
if((0==$PRETEND_RUN));then
#run to log file
#($@2>&1;echo$?>$ERROR_CODE_FILE)|tee-a${LOG_FILE}2>&1
($@2>&1;echo$?>$ERROR_CODE_FILE)|tee-a${LOG_FILE}
ERROR_CODE=`cat$ERROR_CODE_FILE`
if((0!=$ERROR_CODE));then
printf″\nError occured while executing the last command!\n″
printf″Please correct the error and re-run this script.\n″
kill $$
fi
fi
3、在Console中不显示执行的命令,但是显示该命令执行的输出信息,同时将程序运行的输出信息记录到日志文件中。请参阅图3。
处理步骤:
1)对于一段要执行的命令,例如“ls/opt/sp3000”,将该字符串放入变量CMD,即CMD=“ls/opt/sp3000”。
2)将要输出的日志文件名称放入变量LOG_FILE:
LOG_FILE=${TARGET_REVISION_DIR}/make.log
3)将是否记录操作时间的标记放入LOG_TIME,如果需要记录操作时间,则LOG_TIME=1,否则设置LOG_TIME为0。
4)调用自定义函数run_tee:
run_tee$CMD
run_tee函数的功能是执行CMD中的命令,并且把该命令的输出同时显示到控制台及日志文件LOG_FILE,但是该CMD命令的内容在控制台及日志文件LOG_FILE中均不体现。LOG_FILE必须是一个Linux文件系统中可写的文件路径,该文件可以存在真实的物理磁盘中,也可以是在虚拟内存中。
为了记录该操作执行的时间,echo_tee函数还要根据LOG_TIME的值来决定是否把当前时间也同时显示到控制台或者记录到LOG_FILE中,实现方式如下:
if((1==$PRETEND_RUN));then
echo$@
else
$@|tee-a$LOG_FILE
fi
4、记录Shell脚本执行的步骤编号以及内容
在编写大型的Shell脚本时,经常需要将脚本执行的步骤通过控制台详细的汇报给用户,同时将该执行的步骤写入日志文件中。请参阅图4。
处理步骤:
1)对于程序每次要执行的步骤标题,例如“Check SVN sources”,
将该标题放入变量TITLE:
TITLE=“Check SVN sources”。
2)在全局变量Step中保存每次执行的步骤编号。
3)调用自定义函数echo_step:
echo_step$TITLE
echo_step函数的功能是将本次执行步骤的编号以及变量TITLE中的字符串显示到控制台,并且将该自动编号的值增加1。
实现方式如下:
((Step++))
echo_tee
echo_tee″[Step$Step]$@″
综上所述,本发明解决了如下几个在Shell脚本中执行命令时的问题:
1、在控制台和日志文件中同时显示、记录一段文字。
2、在控制台和日志文件中显示并记录执行的命令,并且把该命令的输出内容也同时记录到控制台和日志文件中。
3、在控制台和日志中不显示、记录执行的命令,但是显示和记录命令执行的结果。
4、记录Shell脚本执行的步骤编号及内容。
5、在执行以上4中操作的时候,将当前执行时间同时显示到控制台或者日志文件中。
以上所述仅为本发明的较佳实施例而已,并非用来限定本发明的实施范围。即凡依本发明申请专利范围的内容所作的等效变化与修饰,都应为本发明的技术范畴。
Claims (6)
1.一种基于Shell的带日志执行方法,应用于Linux和Unix平台,该方法实施依据的硬件平台为Linux/Unix所支持的硬件平台,该硬件平台包括CPU、存储设备、键盘、显示器,其特征在于该方法包括如下步骤:
步骤一:将Shell执行脚本中给定的要输出的内容或者命令字符串放入一变量中;
步骤二:将所述变量中的内容可以根据不同的参数选择是否出到控制台,是否在显示器上显示出来;
如果该变量中存放的是普通字符串,则转步骤三;如果该变量中存放的是命令字符串,则转步骤四;
步骤三:普通字符串处理模块处理所述的普通字符串;
步骤四:命令字符串处理模块执行所述的命令字符串,并处理命令执行的输出。
2.根据权利要求1所述的基于Shell的带日志执行方法,其特征在于所述的给定的要输出的内容是要输出的文字信息,存入变量MSG中。
3.根据权利要求1所述的基于Shell的带日志执行方法,其特征在于所述的给定的要输出的内容是要执行的命令,存入变量CMD中。
4.根据权利要求3所述的基于Shell的带日志执行方法,其特征在于还包括以下步骤:
步骤A:将执行的命令的输出结果输出到控制台,并在显示器上显示出来;
步骤B:将所述命令的输出结果记录到位于存储器或内存中的日志文件中。
5.根据权利要求3或4所述的基于Shell的带日志执行方法,其特征在于该方法还包括以下步骤:
步骤a:将脚本执行的步骤标题存入变量TITLE中;
步骤b:在全局变量Step中保存每次执行的步骤编号;
步骤c:将本次执行步骤的编号以及变量TITLE中的字符串显示到控制台供用户参考,并且将该编号的值增加1。
6.根据权利要求1所述的基于Shell的带日志执行方法,其特征在于该方法实施依据的硬件平台为x86、AMD、ARM;所述的存储设备是NANDFlash、或T-Flash。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102008854A CN101369250B (zh) | 2008-10-08 | 2008-10-08 | 一种基于Shell的带日志执行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102008854A CN101369250B (zh) | 2008-10-08 | 2008-10-08 | 一种基于Shell的带日志执行方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101369250A true CN101369250A (zh) | 2009-02-18 |
CN101369250B CN101369250B (zh) | 2010-09-29 |
Family
ID=40413074
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008102008854A Active CN101369250B (zh) | 2008-10-08 | 2008-10-08 | 一种基于Shell的带日志执行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101369250B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937369B (zh) * | 2009-06-30 | 2014-02-12 | 中兴通讯股份有限公司 | 一种多壳共享控制台的方法和系统 |
CN104077141A (zh) * | 2014-07-04 | 2014-10-01 | 用友软件股份有限公司 | Rserve交互机制的优化装置和优化方法 |
CN105653978A (zh) * | 2015-12-29 | 2016-06-08 | 北京握奇智能科技有限公司 | 一种提高tee命令执行速度的方法和系统 |
CN111176763A (zh) * | 2019-12-31 | 2020-05-19 | 杭州迪普科技股份有限公司 | 一种命令的帮助函数调用方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1295613C (zh) * | 2002-10-24 | 2007-01-17 | 华为技术有限公司 | 通用Windows程序运行日志信息记录方法 |
CN100349133C (zh) * | 2005-03-18 | 2007-11-14 | 中国工商银行股份有限公司 | 一种银行主机运行压力测试系统 |
US20060294503A1 (en) * | 2005-06-24 | 2006-12-28 | Microsoft Corporation | Code coverage analysis |
CN100395725C (zh) * | 2006-04-24 | 2008-06-18 | 华为技术有限公司 | 日志信息输出系统及输出方法 |
-
2008
- 2008-10-08 CN CN2008102008854A patent/CN101369250B/zh active Active
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101937369B (zh) * | 2009-06-30 | 2014-02-12 | 中兴通讯股份有限公司 | 一种多壳共享控制台的方法和系统 |
CN104077141A (zh) * | 2014-07-04 | 2014-10-01 | 用友软件股份有限公司 | Rserve交互机制的优化装置和优化方法 |
CN104077141B (zh) * | 2014-07-04 | 2017-09-29 | 用友网络科技股份有限公司 | Rserve交互机制的优化装置和优化方法 |
CN105653978A (zh) * | 2015-12-29 | 2016-06-08 | 北京握奇智能科技有限公司 | 一种提高tee命令执行速度的方法和系统 |
CN105653978B (zh) * | 2015-12-29 | 2018-07-24 | 北京握奇智能科技有限公司 | 一种提高tee命令执行速度的方法和系统 |
CN111176763A (zh) * | 2019-12-31 | 2020-05-19 | 杭州迪普科技股份有限公司 | 一种命令的帮助函数调用方法及装置 |
CN111176763B (zh) * | 2019-12-31 | 2023-03-31 | 杭州迪普科技股份有限公司 | 一种命令的帮助函数调用方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101369250B (zh) | 2010-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10607134B1 (en) | Artificially intelligent systems, devices, and methods for learning and/or using an avatar's circumstances for autonomous avatar operation | |
CN105512304B (zh) | 在线生成互联网应用方法和系统集成方法及支撑平台 | |
CN101369250B (zh) | 一种基于Shell的带日志执行方法 | |
US8819621B2 (en) | System and method for automated re-architectureing of legacy systems using object oriented language | |
US20060195833A1 (en) | Data-burning method and system thereof based on auto-detection of computer platform | |
CN104156311B (zh) | 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法 | |
CN108959436A (zh) | 用于语音对话平台的词库编辑方法及系统 | |
CN113191775A (zh) | 基于以太坊上交易时序信息的庞氏骗局智能合约检测方法 | |
CN106055343A (zh) | 一种基于程序演进模型的目标代码逆向工程系统 | |
CN103970967B (zh) | 一种电力系统电磁暂态仿真分析系统 | |
CN116257847A (zh) | 针对Linux恶意代码的技战术自动化分析系统、方法、介质及设备 | |
CN102135877A (zh) | 自动化构建方法及装置 | |
CN105320510A (zh) | 一种自动追踪数据关系的方法及装置 | |
CN109472135A (zh) | 一种检测进程注入的方法、装置及存储介质 | |
CN112860242B (zh) | 一种轮机模拟器交互数据的自动映射方法 | |
Adzic | Test Driven. NET Development with FitNesse | |
CN107170112A (zh) | 金融设备中元器件时序信息的确定方法、装置及金融设备 | |
CN108446216A (zh) | 跟踪流程轨迹的方法、装置以及存储装置 | |
Ma et al. | Applying a code clone detection method to domain analysis of device drivers | |
CN110532173A (zh) | 一种测试预处理方法、装置、计算机系统及可读存储介质 | |
CN110806982A (zh) | 一种自动化校验的合约形式化验证方法 | |
Cohen et al. | The implementation of software engineering concepts in the greenhouse crop model hortisim1 | |
CN116501452B (zh) | 模型处理方法、仿真平台及电子设备和存储介质 | |
US8046742B1 (en) | Self-assembling software generator | |
Zigouris et al. | Labview to ccs link for automating digital signal & image processing applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |