UNIX 新手指南: 一些很好的 Shell 诀窍( 二 )


使用单引号 (') 将文本括起来以传递文本字符串的字面引用,所有的变量名、元字符等都作为文字字符,而不它们的含义或值来传递 。
请注意在不同的 Shell 中引用的确切规则会有所区别 。参考您所使用的特殊 Shell 的 man 页面来了解准确规则 。
分配一个变量,然后尝试使用各种引用格式输出该变量,如清单 1 中所示 。
清单 1. 使用 echo 演示 Shell 变量引用格式
$ myvar = "Hello, world"
$ echo $myvar
Hello, world
$ echo "$myvar"
Hello, world
$ echo '$myvar'
$myvar
$ echo $myvar
$myvar
$ echo '$myvar'
'Hello, world'
$ echo "'$myvar'"
'Hello, world'
$ echo '"$myvar"'
"$myvar"
$ echo "$myvar"
"Hello, world"
注意解释变量的方式取决于所使用的引用格式 。
注释
在 Shell 中,以井号 (#) 开始一个注释行 。井号及其后面跟随的同一行的所有内容都被忽略 。尝试输入几行夹杂注释的文本,如清单 2 中所示:
清单 2. 在 Shell 中使用注释
$ # a comment does nothing
$ echo "Hello, world" # This text is ignored
Hello, world
$ echo # This will not output
$ echo 'But a hash (#) can be quoted'
But a hash (#) can be quoted
$ echo "# Even in double quotes"
# Even in double quotes
$
创建 Shell 脚本
正如您所看到的,您可以直接在命令行测试这些 Shell 编程结构 。但是,当您完成了单行命令的学习并且真正开始构建更长的程序时,您需要将程序写入称为脚本的文件 。脚本 是一个设置了可执行位的文本文件,并且包含由 Shell 语言命令组成的程序 。UNIX Shell 是一种解释性语言,这意味着它的程序不经过编译,而是由解释器读取,解释器本身是 Shell 可执行程序,比如 /bin/sh、/bin/bsh 或 /bin/bash 。
Shell 脚本的第一行通常都是相同的:
#!/bin/sh
这是 Shell 自己使用的一种特殊注释,用于确定文件的语言或目录 。感叹号在 UNIX 和排版术语中常常被称为 bang,后面跟随的路径名告诉 Shell 应该使用来执行该文件的解释器 。在本例中是 /bin/sh,它在许多系统中代表 Bourne Shell 可执行程序本身 。举例来说,特别为 Korn Shell 编写的脚本应该以 #!/usr/bin/ksh 开始,正如 Ruby 脚本将以 #!/usr/bin/ruby 开始 。安装 bash 之后,/bin/sh 通常是到 bash 二进制程序的符号链接 。并且考虑到兼容性,使用 /bin/sh 比使用 /bin/bash 更可取 。在一些系统中,比如 IBM AIX 5L?,Bourne Shell 可执行程序的名称是 bsh,并且位于 /usr/bin/bsh 。
清单 3 提供了 Shell 脚本的简短示例 。
清单 3. Shell 脚本示例
#!/bin/sh
# This is a shell script
message = "Hello, world!"
echo "The message is '"$message"'"
按照本系列教程前面文章中的说明,使用 vi 编辑器键入该脚本并保存到名为 myscript 的文件中(请参见参考资料部分) 。然后使用 chmod 设置该文件的执行权限,使该文件可以执行:
$ chmod u x myscript
此命令使该文件只能由您执行 。如果希望系统中的所有用户都能执行该文件,那么您还可以为所有用户设置执行权限:
$ chmod a x myscript
现在您可以运行该脚本 。给出该文件的名称和相对于当前工作目录的路径,在路径中使用一个点字符 (.) 来表示:
$ ./myscript
The message is 'Hello, world!'
$
Shell 变量 PATH 包含一组以冒号分隔的目录 。它就是您的路径,Shell 总是会“看到这些目录中的所有文件 。UNIX Path 的目的是为了便于运行二进制文件 。这就是为什么您只需要键入命令的基本文件名,比如 ls 和 echo,而不用提供它们的完整或相对路径名 。如果您将脚本移动到 Path 中的目录,那么只需键入它的名字就可以运行 。具体的 Path 取决于您的 UNIX 实现和本地设置,但 Path 中的目录通常包括 /bin、/usr/bin 和 /usr/local/bin 。

推荐阅读