语法:
read variable [variable......]
例子:
$ cat color6
echo This program prompts for user input
echo “please enter your favorite two colors -> \c”
read color_a color_b
echo The colors you entered are: $color_b $color_a
$ chmod +x color6
$ color6
This program prompts for user input
Please enter your favorite two colors -> red blue
The colors you entered are: blue red
$ color6
This program prompts for user input
Please enter you favorite two colors -> red blue tan
The color you enterd are :blue tan red
用户使用命令行参数传递信息进程序,在命令执行之前,用户必须知道正确的语法。有一种情况,你想要在用户执行程序的时候提示他输入这些参数。read命令就是用来在程序执行的时候收集终端键入的信息。
你通常会想要使用echo命令来提供用户一个提示,让他知道程序正在等待一些输入,同时通知用户应该输入的类型。因此,每一个read命令应该在echo命令前面。
read命令会给出一个变量名的列表,这些变量会被用户在提示符下输入的词赋值。(以空格分隔)。如果read命令定义的变量比输入的词要多,剩余变量会被赋空值。如果用户输入的词要比变量多,剩余的数据会赋给列表中的最后一个变量。
一旦被赋值,你就可以象其他的shell变量一样存取这些变量。
注意:不要混淆位置参数和变量read。位置参数在命令被激活时在命令行中定义
read命令给变量赋值是在程序执行之中,通过对输入提示的响应而给变量赋值。
以下例子提示用户输入要被安装的文件名:
$ cat > my_install3
echo $0 will install files into your bin directory
echo “Enter the names of the files -> \c”
read filenames
mv $filenames $HOME/bin
echo Instllation is complete
ctrl + d
$ chmod +x my_install13
$ my_install13
my_install13 will install files into your bin directory
Enter the names of the files -> f1 f2
Installaton is complete
这个安装会提示用户输入chmod和移动到$HOME/bin的文件名。这个程序给用户更多的关于应该输入数据情况的指引。而不像install2中用户必须在命令行中提供文件名。用户使用程序不需要特殊的语法。程序让用户确切地知道要输入什么。所有的输入的文件名都会被赋值给变量filenames。
1.8 另外的技术
#号开始的文档为注释部分。
sh shell_program argumetns?
shell_program 的属性可以不是可执行的。
shell_program 必须是可读的。
sh –x shell_program arguments
每一行在被执行前被打印出来在调试程序时有用处。
在shell程序中,#符号被用来提供一段注释。shell会忽略#符号后边的字符,直到一个回车符号为止。
执行一个shell程序的另外一种方法是:sh shell_program arguments
这种方式激活一个子shell并且指定这个子shell为执行这个程序的命令解释器。这个程序文件不是必须为可执行的。这种方式的用途在:你正在在一种shell下工作,同时想要执行用其他shell命令语言写的shell程序十分有用。
你也可以在你的shell程序的第一行前加入#!/usr/bin/ shell_name来指定命令行解释器。因此,如果你当前正在POSIX shell下工作,但是想要执行一个C shell的脚本,你的C shell程序的第一行应该为:
#!/usr/bin/csh
虽然shell程序没有调试器,命令:
sh –x shell_program arguments
会在执行每一行时,先在屏幕上打印出shell程序的每一行。这允许你看到shell如何进行文件名产生,变量替代,和命令替代。这个选项对发现打字错误十分有帮助。