今天编写了一个测试程序(运行在Linux环境下),其中要将一些命令字符串预先保存在一个文件中,然后测试程序从文件中读取这些命令串。这些命令串中,字段与字段之间是用“\t”分隔符分开,每个命令串的结束,还要用“\r\n”结尾。
开始时,我只是简单的将这样的命令串,比如“305\t00:14:22:9C:22:9B\t10.1.10.17\t\r\n”直接保存到文件中。但是运行测试程序的时候,命令格式总是提示错误。我刚开始以为是从文件中读取命令串的函数有问题,但是经过反复试验,发觉不是读取文件的问题。通过将读取的字符串的每个字符打印显示,才突然想到,原来是这个分隔符在文件中就是以单独的字符存放的,而不是他们代表的意思了。(即“\t”就是'\'和't',而不是TAB键)
既然找到了问题所在,那就在文件中保存的时候,就直接键入Tab键和回车键。但是,在linux下的回车键只代表“\n”,而在windows下的回车键才表示“\r\n”,所以,将这个命令串文件先在windows下建好,再传到linux下,这样,终于将问题解决了。
echo的用法 (鸟哥私房菜300页)
功能说明:显示文字。
语 法:echo [-ne][字符串]或 echo [--help][--version]
补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行号。
参 数:-n 不要在最后自动换行
-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
--help 显示帮助
--version 显示版本信息
每一个shell支持的echo指令可能都不太相同。
-n 不输出最后的\n
-e解释转义字符
-E不解释转义字符
示例:echo "i am a boy" // 执行后会打印 i am a boy
i am a boy
read用法(鸟哥私房菜310页)
read命令:
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
1)read后面的变量var可以只有一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个变量,第二个数据给第二个变量,如果输入数据个数过多,则最后所有的值都给最后一个变量
-p
当变量个数和输入个数一样时:
注意空格,要不会出错
当变量个数和输入个数不一样时,即输入个数比变脸个数多,则多的都赋给最后一个变量:
2)命令计数
-n
read –n 个数
设置read命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量
看一下cc.sh脚本的内容:
read –n 1的意思是只接受一个字符
执行
这里输入y后不用回车,自己就执行
3)等待时间
-t 时间
read –t 时间
使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。-t选项指定read命令等待输入的秒数。当计时满时,read命令返回一个非零退出状态;
看一下cc.sh脚本的内容:
执行cc.sh然后等待超过5s,发现自动退出了
4)关闭回显
-s
read –s
-s选项能够使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read命令将文本颜色设置成与背景相同的颜色),比如密码
看一下cc.sh的脚本内容
执行,看到输入密码的时候屏幕不显示
6)从文本读取内容并且赋给变量