shell教程
-
第一部分:简介
Shell是一个命令解释器。它不仅是操作系统内核与用户之间的绝缘层,同时也是一种功能相当强大的编程语言。一个Shell程序,通常称为脚本,它是一个
-
第一章:为什么要有Shell编程?
没有一种编程语言是完美的。甚至也没有一种最好的语言;只有一种非常合适或可能非常不合适实际目标的语言。HerbertMayer脚本应用知识对于希望相当
-
第二章:从一个Sha-Bang(#!)开始
Shell编程就像一个1950年代的自动点唱机…LarryWall在最简单的情况下,脚本程序不过是存储在一个文件里的系统命令列表。这至少让你执行它时不必重新按顺序键入相同功能的命令序列。例子2-1.cleanup:一个清空/var/log目录下的日志文件的脚本#Cleanup#必须以root用户运行.cd/var/logcat/dev/null>messagescat/dev/null&#
-
2.2. 预备练习
系统管理员常常写脚本来自动化日常任务。给出几个实例类似的脚本在哪些地方会有用。.写一个脚本实现显示时间和日期,列出所有登录系统的用户,并
-
第二部分:基础
目录:3.特殊字符4.变量和参数介绍5.引用6.退出和退出状态7.测试8.操作符及相关主题
-
第三章:特殊字符
在脚本或其他别的地方出现的特殊字符#注释.以一个#开头的行(#!是例外)是注释行.#这是一行注释.注释也可以出现在一个命令语句的后面。echo"Acommentwillfollow."#这里可以添加注释.#^注意在#前面可以有空白符#注释行前面也可以有空白字符.#注意这个注释行的开头是一个TAB键.在同一行中,命令不会跟在一个注释的后面。因为这种情况下没有办法分辨注释的结尾,命令只能放在同一行的行
-
第四章. 变量和参数介绍
变量是脚本编程中的如何进行数据表现的办法.它们可以在算术计算中作为操作数,在一个字符串表达式中作为符号表达抽象的意义或是其他的其它意义。变量是表示计算机内存中保存一种数据需要占的一个位置或一组的位置的标识。变量的名字是它的值保存的地方。引用它的值称为变量替换(variablesubstitution)。.$让我们仔细地区别变量和变量的值。如果variable1是一个变量的名字,那么$variabl
-
4.2. 变量赋值
=赋值操作符(它的左右两边不能有空白符)不要搞混了=和-eq,-eq是比赋值操作更高级的测试。注意:等于号(=)根据环境的不同它可能是赋值操作符也可能是一个测试操作符。例子4-2.简单的变量赋值#!/bin/bash#裸变量echo#什么时候变量是“裸”的?比如说,变量名前面没有$?#当变量被赋值而不是引用时,我们称它为是裸变量。#赋值a=879echo"Thevalueof\"a\"is$a."
-
4.3. Bash变量是无类型的
不同与许多其他的编程语言,Bash不以"类型"来区分变量。本质上来说,Bash变量是字符串,但是根据环境的不同,Bash允许变量有整数计算和比较。其中的
-
4.4. 特殊变量类型
局部变量局部变量只在代码块或一个函数里有效(参考函数里的局部变量)环境变量这种变量会影响Shell的行为和用户接口在大多数情况下,每个进程都会有一个"环境表",它由一组由进程使用的环境变量组成。这样看来,Shell看起来和其他的进程一样。每次一个Shell启动时,它都会创建新的合适的环境变量。如果它增加或是更新一个环境变量,都会使这个Shell的环境表得到更新(译者注:换句话说,更改或增加的变量会
-
第五章:引用
引用意味着保护在引号中的字符串.引用在保护被引起字符串中的特殊字符被shell或shell脚本解释或扩展.(如果一个字符能被特殊解释为不同于它字面上表示的意思,那么这个字符是“特殊”的,比如说通配符--*.)bash$ls-l[Vv]*-rw-rw-r--1bozobozo324Apr215:05VIEWDATA.BAT-rw-rw-r--1bozobozo507May414:25vartrace
-
5.2. 转义
转义是引用单字符的方法.在单个字符前面的转义符(\)告诉shell不必特殊解释这个字符,只把它当成字面上的意思。但在一些命令和软件包里,比如说echo和sed,转义一个字符可能会引起一个相反的效果--因为它们可能触发那个字符的特殊意思。一些转义字符的表示的特殊意思和echo,sed连用时:\n表示新行\r表示回车\t表示水平的制表符\v表示垂直的制表符\b表示后退符\a表示“警告”(蜂鸣或是闪动)
-
第六章:退出和退出状态
...therearedarkcornersintheBourneshell,andpeopleuseallofthem.ChetRameyexit命令一般用于结束一个脚本,就像C语言的exit一样。它也能返回一个值给父进程。每一个命令都能返回一个退出状态(有时也看做返回状态).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零值,此值通常可以被解释成一个对应的错误值。除了一些例外的情况,
-
第七章:测试
每一个完善的编程语言都应该能测试一个条件。然后依据测试的结果做进一步的动作。Bash有test命令,各种括号及内嵌的操作符,还有if/then结构来完成上面的功能。一个if/then结构测试一列命令的退出状态是否为0(因为依照惯例,0意味着命令执行成功),如果是0则会执行一个或多个命令。有一个命令[(左方括是特殊字符).它和test是同义词,因为效率的原因,它被内建在shell里。这个命令的参数是
-
7.2. 文件测试操作符
如果下面的条件成立返回真...-e文件存在-a文件存在这个和-e的作用一样.它是不赞成使用的,所以它的用处不大。-f文件是一个普通文件(不是一个目录或
-
7.3. 其它比较操作符
二元比较操作符比较两个变量或是数值。注意整数和字符串比较的分别。整数比较-eq等于if["$a"-eq"$b"]-ne不等于if["$a"-ne"$b"]-gt大于if["$a"-gt"$b"]-ge大于等于if["$a"-ge"$b"]-lt小于if["$a"-lt"$b"]-le小于等于if["$a"-le"$b"]<小于(在双括号里使用)(("$a"<"$b"))<=
-
7.4. 嵌套的if/then条件测试
使用if/then结构的测试可以嵌套。最终的结果和使用上一节的&&混合比较操作符一样。if[condition1]thenif[condition2]thendo-something#Butonlyifboth"condition1"and"con
-
7.5. 检测你对测试命令掌握
一个xinitrc系统文件能用来启动一个X服务器。这个文件包含了相当多的if/then测试,就像下面这个文件的一个摘录展示的一样。if[-f$HOME/.Xclients];thenexec$HOME
-
第八章:操作符和相关主题
赋值变量赋值初始化或改变一个变量的值=通用的变量赋值操作符,可以用于数值和字符串的赋值var=27category=minerals#"="字符后面不能加空白字符.不要把"="赋值操作符和=测试操作符搞混了。#=用于测试操作符if["$string1"="$string2"]#if["X$string1"="X$string2"]会更安全,#它为了防止其中有
-
8.2. 数字常量
除非一个数字有特别的前缀或符号,否则shell脚本把它当成十进制的数。一个前缀为0的数字是八进制数。一个前缀为0x的数字是十六进制数。一个数用内