linux 运行脚本,在屏幕上输出中间过程和把中间过程输入到临时文件里哪个运行的快?

作者&投稿:郗妹 (若有异议请与网页底部的电邮联系)
linux中如何将运行某个脚本的输出记录到log.log呢.~

./your_scripts.sh > log.log 2>&1

把标准输出和错误输出都重定向到log.log文件

之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互。
bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。
1、命令行参数
向shell脚本传递数据的最基本方式是使用命令行参数。
1)读取参数
读取输入的参数的变量为位置参数,位置参数通过标准数字表示,
其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。
shell脚本自动将命令行参数赋值给各个位置变量。
同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号)
当参数多于9个后,必须在shell脚本内使用大括号将变量括起来,如${10}。从而可以使用任意个参数。
2)读取程序名称
传递给变量$0的字符串实际上是程序的路径根据调用方法决定是相对还是绝对路径)。
使用basename命令可以去掉路径前缀,只获得程序名称名字中不 可以有空格)。
3)测试脚本
当脚本认为应该包含参数,却实际上没有数据时,就会出错。
好的方法是对参数进行检查来保证使用参数前确实存在数据,可以使用-n参数来检查。
例子:if [ –n “$1” ] then .. else .. fi
2、特殊的参数变量
用于跟踪命令行参数
1)参数计数
使用特殊变量$#测试执行脚本时包含的命令行参数个数。脚本中任何位置都可以 使用$#
例子:if [ $# –ne 2 ] 即可测试参数个数
可以使用${!#}来返回最后一个命令行参数当无参数时,$#为0,而${!#}为程序名)
2)获取所有数据
变量$*将命令行中提供的所有参数作为一个单词处理,它将多个参数看成 一个参数。
变量$@将命令行中提供的所有参数作为同一个字符串中的多个单词处理。 允许对其中的值进行迭代一般使用for),分隔开不同参数
3、移位
shift命令能够改变命令行参数的相对位置。默 认将每个参数变量左移一个位置变量$0不变,把$1丢弃,注意不可以恢复了!)
在不清楚参数数目情况下,这是一个迭代参数的好办法。
可以为shift提供一个参数,来实现多位移变化。
4、处理选项
选项是由破折号引导的单个字母,用于更改命令的行为。
1,找出选项
1)处理简单选项
可以使用处理命令行参数相同的方法处理选项,抽取时使用case语句进行判断是否符合选项格式。
2)从参数中分离选项
同时使用选项和参数时,可以使用--指示选项列表的结束。发现--后,shell就知道后面的是普通参数了,停止使用case处理选项。
3)处理带值的选项
选项后紧跟参数值,一种方法是在case中对应选项后使用shift和读后一位参数的方法处理。更好的方法如 下:
2,使用getopt命令
getopt命令在处理选项和参数时非常方便。它对参数进行重新组 织,以便于解析
1)命令格式
getopt可以接受任意形式的选项和参数列表,并自动将它们转换为适当的格式。
命令格式为: getopt options optstring parameters
选项字符串(opstring)用于定义命令行中的有效选项字母,以及哪些选项字母需要参数值。
2)脚本中使用getopt
需要使用set命令将现有的命令行选项和参数替换为getopt命令生成的 格式化形式。
需要将原始脚本命令行参数送给getopt命令,然后将getopt命令输出送给set命令,如下:set – `getopts –q ab:cd “$@”`
但是getopt命令不能很好的处理带有空格的参数值,它将空格解析为参数分隔符,而不是将双引号引起来的两个 值合并成一个参数。解决办法如下:
3)更高级的getopts命令
getopts命令顺序的对现有的shell参数变量进行处理,每调用一次,只处理命令中检测到的参数中的一个。处理完所有参数后,以大于0的退出 状态退出。
非常适宜于在循环中解析所有命令行参数
格式为: getopts optstring variable
$optarg包含需要参数值的选项要使用的值,$optind包含getopts停止处理时在参数列表中的位置。
注意:当getopts处理时,会将选项前的-去掉,所以对应的case中不需要破折号。
好的特性:
1)可以在参数值中包含空格
2)选项字母和参数值中间可以没有空格
3)将在命令行中找到的未定义的选项都绑定为单一的输出——问号
5、标准化选项
有一些字母选项具有标准含义。最好按照标准含义定义选项意义
-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y
6、获取用户输入
当需要在执行过程中获得执行脚本人员的输入,使用read命令
1)基本读取
read命令接受标准输入或其他文件描述符输入。读入后将数据放入 一个标准变量中。
-p 允许在read命令行中直接指定一个提示。
可以指定多个变量,也可以不指定将放置在reply环境变量中)
2)计时
使用-t指定一个计时器,计时数满还未输入,read返回一个非0的退出状态。
使用-n指定输入的字符个数,输入达到预定数目时,就自动结束输入
3)默读
使用-s使输入不显示在终端例如输入密码)
4)读取文件
最常用的方法是使用cat命令,并通过管道传给包含read的while语句。

个人感觉应该是输入到临时文件夹下快,具体这个没有测试过,应该要定义个内核级的毫秒定时器。正常来讲,你在屏幕输出的话,需要调用一系列有关输出的东西。为了要让你的屏幕显示,会读取存入缓存区再,数据从高层再发送到底层上,最后再经过底层一系列调用函数或者寄存器什么的,最后显示到你的屏幕上。如果只是把中间过程到临时文件夹下,读取存入缓冲器,然后再保存到某个文件中,这里基本只是对数据的调用保存什么的,应该比单纯要显示能快。。

后者快

因为刷屏速度太慢!


沂南县13474581971: Linux编写脚本,由用户输入数字,计算一个表达式的值,并将结果显示在屏幕上 -
史夏风朗: 给你一个最简单的: #!/bin/bash read i expr 3 "*" $i你输入一个任意数字比如5,屏幕结果是3*5=15. 把这三行保存成脚本test.sh,运行source test.sh就可以了.

沂南县13474581971: 编写一个linuxshell脚本,运行它提示输入你的姓名,当你输入完毕之后程序再次将你输入的结果显示在屏幕上. -
史夏风朗: #!/bin/bash 这里写你的shell文件的位置,如果是linux的bash就应该是这个 read -p "Please input your name: " name 读入名字 echo -e "\nYour full name is: $name 输出名字

沂南县13474581971: linux 怎么才能在运行脚本时,不仅屏幕上显示脚本内容及结果之类的,还能把 这些转存为日志 -
史夏风朗: 一般情况,使用>>追加到日志文件后是不会显示在屏幕上的.如果要同时实现这两个目的 可以在你要执行的脚本外面再包一个脚本:比如 你执行脚本#sh A.SH A.sh里面的内容:sh B.SH >> xxxx.log 这样就会同时实现

沂南县13474581971: linux 中怎样执行脚本 -
史夏风朗: 首先脚本需要有执行权限chmod u+x file.sh 执行脚本有三种方法: 1. ./file.sh特点:开启bash子进程来执行,也就是开启额外的进程来进行,不影响原进程的变量、配置等 2. bash file.sh特点:和./file.sh相同 3. source file.sh 或者 . file.sh特点:...

沂南县13474581971: LINUX脚本编写:在屏幕上一次输出1,2,3,4,5这五个数并且按照顺序显示 -
史夏风朗: seq 5 就可以,要么我没懂你的意思. seq 5 输出1,2,3,4,5, 每个独占一行,没有逗号. seq -s ", " 5 输出1,2,3,4,5

沂南县13474581971: linux 下cron命令执行结果输出到屏幕 -
史夏风朗: 最简单的直接输入 LANG=EN 就可以了,或 LANG=zh-CN 给分! 请参考,希望能帮到你.

沂南县13474581971: linux 怎么把文字输出到屏幕上 -
史夏风朗: 如果文字在文件中,直接使用more、less、pg、head、tail、cat 、tac等命令直接会将文件中的文本输出到屏幕上.

沂南县13474581971: Linux脚本的执行后屏幕上的显示如何传给网页 Linux脚本可以和网页互传参数吗?怎么实现? -
史夏风朗: 这个应该是可以实现的 简单来说应该就是接口的对应 比如说linux的脚本可以把你需要获得的参数放入变量$a $b $c中 那在网页里面,只需要知道你linux中存放的$abc在什么位置,直接调用就可以了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网