首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

UNIX 生手指南: 一些很好的 Shell 诀窍

2013-11-06 
UNIX 新手指南: 一些很好的 Shell 诀窍Hello, world$ echo # This will not output$ echo But a hash (#)

UNIX 新手指南: 一些很好的 Shell 诀窍
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$

?

标志描述-a导出所有已分配值的变量。-cVariable执行从变量?中读取的命令。-e当命令满足以下条件之一时立即退出:命令退出时返回比 0 大的值;命令不是?whileuntil?或?if?结构的一部分;命令不经过?AND?或?OR?检测;或者命令不是管道前加感叹号。-f禁用所有文件名替换。-h定义函数时,定位和记住函数内部调用的所有命令。-i指定交互式?Shell。-k将所有关键字?都放入命令的环境。-n读取命令,但是不执行它们。-r调用受限制的?Shell。-s从标准输入读取命令,然后将输出写入标准错误(不包括 Shell 内置命令的输出)。-t读取并执行单个命令,然后退出。-u在脚本中,将所有未定义?变量视为错误。当尝试变量替换时退出。-v当读取输入行时将其显示出来。-x在执行命令之前显示其完整命令(包括所有的参数和选项)。

?

运算符描述+-*/%求余<小于(1 代表真,0 代表假)<=小于等于(1 代表真,0 代表假)>大于(1 代表真,0 代表假)>=大于等于(1 代表真,0 代表假)<<按位向左移位:将给定的整数或第一个表达式向左移动第二个表达式表示的位数>>按位向右移位:将给定的整数或第一个表达式向右移动第二个表达式表示的位数?

Shell 有时自动生成自身的 Subshell,比如在管道中使用内置命令时。在 Subshell 中,Shell?$?参数扩展到父 Shell 而不是 Subshell 的进程 ID (PID)。

?

现在尝试通过键入脚本的名称来执行它,如清单 19?中所示。


清单 19. vartest 脚本的输出

操作符描述-eq等于-ne不等于-lt小于-le小于等于-gt大于-ge大于等于

构造?while?循环时,有一些注意事项需要牢记在心。首先,在条件与将它括起来的括号之间必须留有空白字符。其次,如果在条件中将变量用于数字比较,那么在?while?语句之前必须首先定义该变量

键入清单 26?中的文本以执行一个简短的?while?循环:


清单 26. 使用 while 循环更改变量

Instead of 23, what number would you like? 17$ echo $VAR17$

?

如果键盘输入的词比变量个数多,那么依次为变量分配输入的词,到最后一个变量时,为其分配输入行余下的部分。(如果输入的词比变量个数,那么为变量分配值直到所有的输入都已分配,然后为所有剩余的变量分配空值。)

File? 1010File? 1212File? 4242: no such file or directoryFile? Carriage return 10 11 12File? Control-C $

?

此技术通常在对循环的输入使用管道时使用。尝试键入清单 33?中的文本,该文本使用循环替代?ls?命令的输出:


清单 33. 从管道读取

The file is 100267120 10If the number were in hex, the value would be 16The file is 100267121 11If the number were in hex, the value would be 17The file is 100267122 12If the number were in hex, the value would be 18$

?

您可以在一个管道输入的?read?中读取多个值,如清单 35?中所示。


清单 35. 从一个管道读取多个变量

  • 将给定文件中所有十进制数的值以十六进制输出:

    ?

    当您把它保存到可执行文件后(请参见创建 Shell 脚本部分),尝试运行该文件,如清单 37?中所示:


    清单 37. baseconv 脚本的输出

                        $ ./baseconvInput base: 10Output base: 16Number: 3321Input base: 2Output base: 1100Number: 1015Input base: 16Output base: ANumber: ACA2762Input base: 10Output base: 10Number:                         Carriage return                    $

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

  • 热点排行