永发信息网

linux系统下符号显示不正常!

答案:4  悬赏:0  手机版
解决时间 2021-07-21 08:30

我想使用管道符| 结果输出个~

其实符号也输出不正常!这是为何?这样没法干了!

最佳答案

export LANG=zh_CN.UTF-8


打上面这个命令试试看

全部回答
% rpm -q tcl tcl-8.0.5-30 语言可以用交互式或者脚本的方式执行,要使用交互式的TCL环境,只要输入 $ tcls % 出现的"%"符号是TCL的提示符,然后就可以使用TCL命令的。 如果你要使用脚本方式的TCL,首先把你的脚本写成一个文本文件,例如test.tcl,然 后执行 $ tclsh test.tcl 在tcl脚本中,每一行或者是一个命令行,或者是一个注释。注释行必须以#符号开头 ,而命令行最好以分号结束,虽然不一定要这样做,但是这样做可以免去不少麻烦。 变量 在tcl中,有两种基本类型的变量,即标量和数组。标量就是一般的数字或者字符串变 量,可以用set语句定义同时赋值: % set i 1 1 字符串应该用引号括起来: % set str "test" 'test' 要输出一个标量的内容,使用put语句: % puts $str test $用来说明str是一个变量。puts函数在标准输出显示变量的内容。 数组也可以用set语句定义,实际上,tcl中建立数组只是单个建立数组的元素。例如 ,% set arr(1) 0 0 %et arr(2) 1 1 这样就建立了一个两个元素的数组arr。在TCL中,不存在相当于数组边界这样的东西 ,例如 % set arr(100) to 这时数组中实际只存在arr(1),arr(2)和arr(100),这是和C语言不同的地方。用arr ay size命令可以返回数组的 % array ize a 访问数组的方法和访问标两实际是一样的,例 % puts $arr(100 to 可以用同样的方法创建多维数组。 要使用数组中的所有元素,需要使用一种特殊的便利方式。首先要启动startsearsh: % array startsearch arr s-1-arr 这里返回了一个搜索id,你可以把它传递给某个变量,因为以后还要使用它进行进一 步的搜索: % set my_id [array startsearch arr] s-1-arr 现在my_id的内容是s-1-arr,然后,就可以搜索arr的内容了: % array nextelement arr $my_id whi 这里的array nextelement返回的是什么?可能有点出乎你的意料,是arr数组的下标 ,再执行一次array nextelement命令又会找出另外一个下标: % array nextelement arr $my_id 4 这样遍历下去,可以找出arr数组的所有下标,而知道下标之后,就可以用$arr(4)之 类的方式访问arr的内容了。当遍历完成之后,array nextelement命令将简单地返回: % array nextelement arr $my_id % 这时就可以停止遍历过程了,如果你想确认遍历是否完成,可以使用array anymore命 令: % array anymore arr $my_id 0 返回0说明遍历已经完成。 串处理 TCL中可以进行一般的串处理过程,这可以使用string命令和append命令,append命令 将某个字符串加到另外一个字符串的后面: % set str1 "test " test % set str2 "cook it" cook it % append str1 $str2 " and other" test cook it and other string命令可以执行字符串的比较,删除和查询,其格式是 string [参数] string1 [string2] 参数可以是下面的命令之一: compare 按照字典顺序对字符串进行比较,根据相对关系返回-1,0或者+1。 first 返回string2中第一次出现string1的位置,如果失败,返回-1。 last 返回string2中最后一次出现string1的位置,如果失败,返回-1 trim 从string1中删除开头和结尾的出现在string2中的字符 trimleft 从string1中删除开头的出现在string2中的字符。 trimright 从string1中删除结尾的出现在string2中的字符 下面几个用在string中的参数不需要string2变量: length 返回tring1的长度 tolower 返回将string1全部小写化的串 toupper 返回将string1全部大写化的串 运算 TCL的运算方式比较别扭,它使用expr命令作为计算符号,其用法类似C语言的+=和/= ,例如, % set j [expr $i/5] 1 注意TCL会自动选择整数或者浮点计算: % set l [ expr $i /4.0] 1.25 % set l [ expr $i /4] 1 在TCL里面可以使用+ - * /和%作为基本运算符,另外通常还包括一些数学函数,如a bs,sin,cos,exp和power(乘方)等等。 另外,还有一个起运算符作用的命令incr,它用来对变量加一: % set i 1 1 % incr i 2 流程控制 tcl支持分支和循环。分支语句可以使用if和switch实现。if语句的和C语言类似,如 if { set y 10; } 注意判断子句也需要使用花括号。 与C语言一样,tcl的if语句也可以使用else和elseif。 switch语句的用法有点类似这样: switch $x { 0 10 20 } 与C的switch语句不同,每次只有符合分支值的子句才被执行。 循环命令主要由for,foreach和while构成,而且每一个都可以使用break和continue 子句。 for语句的格式有点类似这样: for 将会输出从1到9的整数。 如果用while循环,这个句子可以写成 while { puts $i; incr i; } foreach是对于集合中的每一个元素执行一次命令,大致的命令格式是 foreach [变量] { 语句; } 例如 % foreach j { put $j; } 1 3 5 函数 如同在一般的编程语言里面一样,在tcl里面也可以定义函数,这是通过proc命令实现 的: proc my_proc { puts $i; } 这样就定义了一个名字叫proc的函数,它只是在终端显示输入变元的内容。 要使用这个函数,简单地输入它的名字: % my_proc 5 如果变元的数目是0,只要使用空的变元列表,例如 proc my_proc {} 尽管tcl还可以处理更复杂的过程,但是我们不再介绍了,例如文件的读写以及tk图形 语言,因为我们处理tcl的主要目标就是理解expect,对于更复杂的编程工作,我们建议 你使用perl。 11.1.2 expect expect是建立在tcl基础上的一个工具,它用来让一些需要交互的任务自动化地完成。 我们首先从一个简单的例子开始,如同在这一节一开始就提到的,我们想设置一个自动 的文件下载程序。 我们看一看这样的一个例子脚本: #! /usr/bin/expect spawn ftp 202.199.248.11 expect "Name" send "ftp\r" expect "Password:" send "nothing\r" expect "apply" send "cd /pub/UNIX/Linux/remoteX\r" expect "successful." send "bin\r" expect "set to I" send "get exceed5.zip\r" expect "complete." send "quit\r" 这个是什么意思?呵呵,就是个自动下载程序。第一行说明这个程序应该调用/usr/b in/expect去执行,然后的就是expect命令。 察看expect的手册页面(man expect)可以得到一个很长的expect说明,可惜其中关于 expect的语法仍然介绍的不够。一般来说,expect主要用在需要自动执行人机交互的过 程中,例如fsck程序,这个程序会不断地提问"yes/no",像这样的命令就可以用expect 来完成。 spawn语句在expect脚本中用于启动一个新的进程,在我们的程序中,spawn ftp 202 .199.248.11就是去执行ftp程序,接下来,就是expect和send的指令对了。 每一对expect和send指令代表一个信息/回应。如果这样说不好理解的话,那么可以看 一看ftp的具体执行过程: ftp 202.199.248.11 Connected to 202.199.248.11. 220 mail.asnc.edu.cn FTP server (BeroFTPD 1.3.3(3) Sun Feb 20 15:52:49 CST 2000. Name (202.199.248.11:wanghy): 显然,一旦连接成功,服务器会返回一个Name(202.199.248.11:wanghy):的字符串来 要求客户给出用户名。expect语句简单地在返回信息中查询你给出的字符串,一旦成功 就执行下面的命令,现在,expect " Name"已经成功地找到了Name字符串,接下来可以 执行send命令了。 send命令比expect命令更简单,它简单地向标准输入提交你设定的字符串,现在设置 为send "ftp\r"表示等到登录信息之后就给出一个输入ftp回车,也就是标准的登录过 程。 下面的行与这些行完全一样,只是机械地等待服务器的回应,并且提交自己的输入。 要使用这个expect脚本,你只需要将它设置为可执行的属性,然后执行它,expect就 会执行你需要的服务。 由于expect是tcl的扩展,所以你在expect文件中可以象tcl脚本一样设置变量和程序 流程。 现在我们看一看我们还能够如何改进我们的expect脚本。ftp命令可能会失败,比如远 端的机器可能会无法提供服务,或者在启动ftp命令时本地机器发生问题。为了处理这一 类的问题,我们可以使用expect的timeout选项来设置超时的话expect脚本自动退出: #! /usr/bin/expect spawn ftp 202.199.248.11 expect { timeout exit Connect } ……………… 注意这里面使用的花括号。它的含义是使用一组并列表达式。使用并列表达式的主要 原因是这样:如果使用下面的指令对: expect timeout exit 那么由于expect脚本是顺序执行的,那么当程序执行到这个expect的时候就会阻塞, 所以程序会一直等待到timeout然后退出。并列表达式则是相当于switch的行为,只要列 出的几项内容有一项得到满足,expect命令就得到满足,于是程序可以正常执行。上面 的脚本表示,如果连接ftp的时候发生了超时,那么就退出,否则,一旦发现Connect应 答,说明服务器已经正常了,那么就可以继续运行了。 我们可以看看用tcl能够对我们的expect脚本提供什么帮助。我们可以设置让expect脚 本不断地连接远端服务器的服务,直到正常建立连接开始,为此,我们可以把建立连接 的命令放在一个循环里面,并且根据回应的不同自动选择重新输入命令还是继续执行: spawn ftp while { expect "ftp>" send "o 202.199.248.11\r" expect { "Connected" break "refused" ; } } 这里使用了我们在tcl语言中讲到的while和break命令,熟悉C的读者应该很容易看出 它的行为:不断地等待ftp>提示符,在提示符下面发送连接远端服务器的命令,如果服 务器回应是refused(连接失败),就等待10秒钟,然后开始下一次循环;如果是Conne cted,那么就跳出循环执行下面的命令。sleep是expect的一个标准命令,表示暂停若干 秒钟。 expect还支持许多更复杂的进程控制方式,如fork,disconnect等等,你可以从手册 页面中得到详细的信息。另外,各种tcl运算符和流程控制命令,包括tcl函数也可以使 用。 有些读者可能会问,如果expect执行的话是否控制台输入不能使用了,答案是否定的 。expect命令运行时,如果某个等待的信息没有得到,那么程序会阻塞在相应的expect 语句处,这时,你在键盘上输入的东西仍然可以正常地传递到程序中去,其实对于那些 expect处理的信息,原则上你输入的内容仍然有效,只是expect的反映太快,总是抢在 你的前面“输入”就是了。知道了这一点之后,你就可能写一个expect脚本,让expect 自动处理来自fscki的那些恶心的yes/no选项(我们介绍过,这些yes/no其实完全是多余 的,正常情况下你除了选择yes之外什么也干不了)。 缺省下,expect在标准输出(你的终端上)输出所有来自应用程序的回应信息,你可 以用下面的两个命令重定向这些信息: log_file [文件名] 这个命令让expect在你设置的文件中记录输出信息。必须注意,这个选项并不影响控 制台输出信息,不过如果你通过crond设置expect脚本在半夜运行的话,你就确实可能需 要这个命令来记录各种信息了。例如: log_file expect.log log_user 0/1 这个选项设置是否显示输出信息,设置为1时是缺省值,为0 的话,expect将不产生任 何输出信息,或者说简单地过滤掉控制台输出。必须记住,如果你用log_user 0关闭了 控制台输出,那么你同时也就关闭了对记录文件的输出。 这一点很让人困扰,如果你确实想要记录expect的输出却不想让它在控制台上制造垃 圾的话,你可以简单地把expect的输出重定向到/dev/null: ./test.exp > /dev/null 你可以象下面这样使用一对fork和disconnect命令。expect的disconnect命令将使得 相应的进程到后台执行,输入和输出被重定向到/dev/null: if [fork]!=0 exit disconnect fork命令会产生出一个子进程,而且它产生返回值,如果返回的是0,说明这是一个子 进程,如果不为0,那么是父进程。因此,执行了fork命令之后,父进程死亡而子进程被 disconnect命令放到后台执行。注意disconnect命令只能对子进程使用。 11.2 awk和文件的处理 UNIX里面充斥着各种记录文件和类似的东西。对文本文件的处理是系统管理员每天重 要的工作,例如从系统记录中查找重要的内容,或者对某种程序的输出进行统计等等。 我们将介绍常用的一个处理程序,即gawk。 11.2.1 grep和正则表达式 让我们首先从grep命令开始。这个命令大家应该很熟悉了,它用来在文件中查找一个 字符串。不过,实际上,grep的处理功能要强大和复杂的多。 grep 命令的语法是 grep [模式] [文件名] 如果没有给出文件名,就缺省使用标准输入。grep每次读取一行,并且和给出的模式 进行匹配,如果成功就把这一行会显,例如:(粗体的是我们输入的内容) $ grep test close test my hand test my hand grep的“模式”也称为正则表达式,可以由各种基本的正则表达式元素构成。正则表 达式元素主要包括下面几种: 字符串 匹配任何字符串,例如grep test表示在标准输入中1 [...] 封闭集中匹配一个字符,如:[abcde]可以匹配a,b,c,d,e [^...] 求补集中匹配一个字符,例如[^ABC]匹配 . 匹配任意字符 \s 空白符 \S 非空白符 \d 数字 \D 非数字 \w 字母或数字 \W 非字母和数字 * 匹配任何字符 上面的形式是grep中使用的基本正则表达式,另外,还可以使用egrep,egrep是grep 的一个扩展版本,支持下面这些扩展的正则字符串: ^ 匹配一行的开始 $ 匹配一行的结尾 ( ) 确定正则表达式求值顺序,和正常演算中的括号意思差不多。 (...|...|...) 或,可选项之一进行匹配,例如:(abc|dev|ghi)可以匹配abc,dev,gh i,而(ww|gg)do可以匹配wwdo或者ggdo。 + 一次或多次模式 如:aba+匹配aba,abaa...不匹配ab 通常,我们有两种方法使用grep和egrep,一种是使用管道,例如我们应该熟悉的ps ax |grep sendmail,另一种是直接在文件中搜索对应的字符串。 grep/egrep还可以在命令行使用开关,常用的开关包括: -b 在行前加上块号 -c 统计匹配行的个数 -n 在行前加上行号 -w 将模式解释为字符串,所有正则表达式的控制命令失效 -x 精确匹配 -r 查询文件时包含子目录 举个例子来说,我们想在/var/log/httpd/access_log中查询所有不是来自本地(192 .168.0.1)的请求记录,可以执行: grep –v "^192.168.0.1" /var/log/httpd/access_log ^用来让grep 只在行首匹配。 在grep查询的时候可以使用通配符代表多个文件,例如,grep start * -r将在当前目 录以及所有子目录的所有文件中查询start字符串。

你需要把你的问题描述清楚,具体做什么,现象是什么?

exit退出,再进来就可以了!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
丝路英雄中,怎么看对方的声望
娄星区娄底和园饭店这个地址在什么地方,我要
你好,今天大盘能涨么
冒险岛多少人玩 啊??
英雄岛合成装备,上面写的主装备栏里该放什么
靠自己的能力,最年轻买宝马的是几岁?
张学友07香港演唱会唱了哪些歌曲
临澧县常德飓风网络会所(朱荷路)怎么去啊,谁
何种帖子称为水帖?
帕萨特领驭自动巡航指示灯亮是什么意思
一个简单的JAVA程序题目.求解.
红旗区新乡中国电信(天翼加盟店)这个地址怎么
今年水果为什么那么贵,日本水果为什么这么贵
DNF福建3区速射一把多少钱?是3区
如何用电脑刻录MTV
推荐资讯
英文版的NBAlive2006的游戏可否关掉? 另外常
河南安阳豫北棉纺织厂布机车间的佀卫敏还在吗
京山市荆门中国工商银行(京山联合广场支行)哪
谁知道校园爱情小说帮忙推荐一下
请问哪个星座女最有资格降服双子男?
赫山区益阳特色姐妹早餐我想知道这个在什么地
你爱的人爱着别人你会怎么做?
好奇怪 请告诉我好吗
恩施市恩施武汉环球这个地址怎么能查询到,着
坐300快能到团结湖吗?
請問明年流行什麽樣的靴子?
道外区哈尔滨百世汇通(太平二部)地址在哪里啊
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?