在s h e l l脚本中,可以用几种不同的方式读入数据:可以使用标准输入—缺省为键盘,或者指定一个文件作为输入。对于输出也是一样:如果不指定某个文件作为输出,标准输出总是和终端屏幕相关联。如果所使用命令出现了什么错误,它也会缺省输出到屏幕上,如果不想把这些信息输出到屏幕上,也可以把这些信息指定到一个文件中。
5.1 echo
使用e c h o命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为:
echo string
e c h o命令有很多功能,其中最常用的是下面几个:
c 不换行。
进纸。
跳格。
换行。
如果希望提示符出现在输出的字符串之后,可以用
上面的命令将会有如下的显示:
其中“□”是光标。
如果想在输出字符之后,让光标移到下一行,可以用:
$ echo "The red pen ran out of ink"
还可以用e c h o命令输出转义符以及变量。在下面的例子中,你可以让终端铃响一声,显示出$ H O M E目录,并且可以让系统执行 t t y命令(注意,该命令用键盘左上角的符号,法语中的抑音符引起来,不是单引号, )。
如果是LINUX系统,那么......必须使用- n选项来禁止echo命令输出后换行:
还可以在e c h o语句中使用跳格符,记住别忘了加反斜杠 :
如果想把一个字符串输出到文件中,使用重定向符号 >。在下面的例子中一个字符串被重定向到一个名为m y f i l e的文件中:
$ echo "The log files have all been done"> myfile
或者可以追加到一个文件的末尾,这意味着不覆盖原有的内容:
$ echo "$LOGNAME carried them out at `date`">>myfile
现在让我们看一下m y f i l e文件中的内容:
初涉s h e l l的用户常常会遇到的一个问题就是如何把双引号包含到 e c h o命令的字符串中。
引号是一个特殊字符,所以必须要使用反斜杠 来使s h e l l忽略它的特殊含义。假设你希望使用e c h o命令输出这样的字符串: “/ d e v / r m t 0”,那么我们只要在引号前面加上反斜杠 即可:
$ echo ""/dev/rmt0""
" / d e v / r m t 0 "
5.2 read
可以使用r e a d语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只指定了一个变量,那么 r e a d将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。
它的一般形式为:
read varible1 varible2 ...
在下面的例子中,只指定了一个变量,它将被赋予直至回车之前的所有内容:
在下面的例子中,我们给出了两个变量,它们分别被赋予名字和姓氏。 s h e l l将用空格作为变量之间的分隔符:
如果输入文本域过长, Shell 将所有的超长部分赋予最后一个变量。下面的例子,假定要读取变量名字和姓,但这次输入三个名字;结果如下;
在上面的例子中,如果我们输入字符串 John Lemon Doe,那么第一个单词将被赋给第一个变量,而由于变量数少于单词数,字符串后面的部分将被全部赋给第二个变量。
在编写s h e l l脚本的时候,如果担心用户会对此感到迷惑,可以采用每一个 r e a d语句只给一个变量赋值的办法:
用户在运行上面这个脚本的时候,就能够知道哪些信息赋给了哪个变量。
举报/反馈