初识shell
shell是操作系统提供的命令接口,其实就是一个命令解释器。
Unix的多种shell
v Bourne shell
Bournshell(sh)是标准的UNIX shell ,用来管理系统。大多数系统管理脚本,如rc启动和停止脚本,关机脚本,都是Bourneshell脚本,这是管理员常用的Shell功能。Bourne shell是AT&T公司的产品,闻名于它的简洁,紧凑,快速。Bourne Shell默认的提示符是美元符号($)。
v C shell
C Shell(csh)是伯克利分校开发的,它增加了一些功能,如命令行历史,别名,内建算术和作业控制。C Shell延续了Bourne Shell的用户交互方式,但管理员更喜欢Bourne Shell脚本方式,因为Bourneshell的脚本简单,速度快于相同脚本在C Shell中的运行速度。默认的C shell提示符是百分号(%)。
v Korn shell
Korn Shell是AT&T公司的David Korn编写的,是Bourne Shell的一个扩展版。默认的Korn shell提示符是美元符号($)。
v Bourne againshell (bash)
bash是Unix Bourn shell的GNU版本 ,是Linux系统默认的shell 。bash默认的提示符是美元符号($)。
v TC shell
TC Shell(tcsh)它是UNIX C Shell的一个分支,但添加了许多功能。
v Z shell
Z Shell是另外一个Linux Shell,它结合了bash,TC Shell和Korn Shell的一些功能。
通配符
bash下使用的通配符:
?代表任何单一字符
* 代表任何字符串,可以是空串
[字符组合] 在中括号中的字符皆符合,例[a-z],[ace]
[!字符组合] 不在中括号中的字符皆符合,例[!0-9]
shell的基本功能
v 命令的解释执行
v 环境变量的设置
v 输入/输出重定向
v shell程序设计
UNIX下 流的概念
Linux自动为每条执行的命令(进程)打开三个文件,分别用于读取输入数据、发送输出数据和错误信息,这三个文件分别叫标准输入(stdin)、标准输出(stdout)和标准错误文件(stderr)
信息流的标准定义:
v 标准输入流(stdin): 文件描述符0, 默认为键盘.
v 标准输出流(stdout): 文件描述符1, 默认为显示器.
v 标准错误流(stderr): 文件描述符2, 默认为显示器
输入/输出重定向
输入输出重定向就是对系统信息流标准定义的修改
※ 输入重定向 <
例: prog < infile
※ 输出重定向 > ,>>
例: pwd > outfile ; ls –l >> file1 ;$ prog < infile > outfile
※ 错误流重定向 >&
例: gcc hello.c >& log
管道线(pipeline)的概念
在命令中利用管道线(|)将命令隔开,实现将一个程序或命令的输出作为另一个程序或命令的输入
下列字符可作命令表的分隔符
&&:若前一命令执行成功,则执行后一命令,例: mail zhang < letter && rm letter
||:若前一命令执行失败,则执行后一命令,例: write zhang < letter || mail zhang <letter
环境变量的设置
环境变量是系统预定义的一些变量,如PATH,LOGNAME等变量,例如:
查阅命令:env
相关文件: /etc/profile; ~/.bash_profile ; ~/.bash_login ; ~/.profile
打通路径:
PATH=$PATH:$HOME //$HOME代表需要添加到路径变量中的目录名
Shell Programming
shell程序: 一种解释执行的脚本(script)语言,类似于DOS 下的.bat文件,但功能更强.
shell是按行解释执行的,注释在行首加#,习惯文件的第一行以”#!/bin/sh”开头,指明使用哪种解释器.
执行方式(三种):
1、$ sh < file.sh
2、$ sh file.sh
3、首先修改shell程序的权限为用户可执行,如: $ chmod +x file.sh
然后在命令行下直接输入:$./file.sh (未打通路径,若打通路径,./ 不需要)
shell变量的使用
变量的赋值,变量的引用(在变量名前加$)如
不同的引号对shell变量产生不同的效果
1、单引号’ ’:shell将单引号中的内容看成纯粹的字符串
2、双引号” ”:shell对双引号中的特殊字符进行解释
3、反引号` `:对反引号中的内容作为shell命令执行
变量的作用域
shell变量也有局部定义和全局定义之分。不做特殊说明的变量均是局部变量,只在为它赋值的shell进程中起作用。要是变量在多个进程中都能起作用,通过export命令使其变为全局变量.
命令的位置变量
在shell中命令的位置变量类似于C语言中argc和argv参数的功能,它们主要对命令行中各个参数的位置进行描述。记住$# ; $* ;$? ;$$ ;$!的定义
$# 位置参数的个数
$* 用单字符串显示传递参数
$? 为前一命令返回的状态值(0为正常)
$$ 当前shell进程的pid值
$! 最近访问的后台进程的pid值
test命令的使用
格式: test expre 或 [expre]
当表达式的值为真时,test命令返回真值0,否则返回假值非0.
1、对文件特性的测试:test –[dfrwxs] file
1、对字符串内容的测试
test s ——当字符串S为非空时,测试结果为真值
test -zs ——当字符串S为空时,测试结果为真值
test s1 = s2 ——当字符串S1与s2相同时,测试结果为真值
test s1! = s2 ——当字符串S1与s2不相同时,测试结果为真值
2、对整数N的测试
test n1 –eq n2——当整数n1与n2相等时,返回真值;
test n1 –ne n2——当整数n1与n2不相等时,返回真值;
test n1 –lt n2——当整数n1小于n2时,返回真值;
test n1 –le n2——当整数n1小于等于n2时,返回真值;
test n1 –gt n2——当整数n1大于n2时,返回真值;
test n1 –ge n2——当整数n1大于等于n2时,返回真值;
条件控制语句
v if语句
(1) 无分支条件语句:if then fi
(2)二分支条件语句:if then else fi
(3)多分支条件语句:if then elif then fi
v case语句: case in 结构
caseword in
pattern-1) pat1-list1;;
pattern-2) pat2-list2;;
……
*) default-list;;
esac
循环语句
v for循环: for in done结构
v while循环: while do done结构
v until循环: until do done
将不必要的信息送入系统垃圾文件/dev/null (黑洞)中