当前位置:文档之家› UNIX 基础培训教材

UNIX 基础培训教材




UNIX 基础培训教材
UNIX命令与实用程序
(基于Digital Unix)



目录

1 UNIX起源、流派及标准 6
1.1 UNIX的发展简史 6
1.2 UNIX标准化 7
1.3 常见商业版本 7
2 DIGITAL UNIX优点 7
3 初次上机 8
3.1 进入系统 8
3.2 改变口令 9
3.3 chsh 改变login shell 9
3.4 chfn 改变用户电话号码,力公室位置等信息 9
3.5 获得帮助 9
3.6 作业调度 10
4 UNIX文件和目录结构 10
4.1 文件名和目录名 10
4.2 文件类型 10
4.3 文件系统结构 10
4.4 目录树 11
4.5 目录和文件的使用 11
4.6 文件属性 13
4.6.1 定义 13
4.6.2 改变文件访问属性 14
4.6.3 改变文件属主 14
4.6.4 改变文件属组 14
4.6.5 更新文件访问时间 14
5 命令,重定向,管道和过滤器 14
5.1 命令格式 14
5.2 重定向 15
5.3 管道和过滤器 15
6 UNIX命令汇总 16
6.1 alias 别名 ksh、csh命令 16
6.2 unalias 取消别名 16
6.3 bg %jobid 恢复挂起的作业到后台运行 16
6.4 cal 显示当前日的月历 16
6.5 chown owner file 改变文件属性 16
6.6 启动一个cshell命令解释程序 17
6.7 date 显示和设置日期 17
6.8 echo string 在标准输出上回显string 17
6.9 env 显示环境变量 17
6.10 exit 结束用户登录 17
6.11 export variable 17
6.12 fg %jobid将挂起的作业调入前台执行 17
6.13 fmt file 简单正文格式化 17
6.14 head file 显示文件头部10行 17
6.15 history 显示以前被执行过的命令csh ,ksh 18
6.16 jobs 显示所有运行的任务 18
6.17 kill pid 给进程发中止信号 18
6.18 ksh 启动ksh 命令解释程序 18
6.19 more 命令 18
6.20 news 查看新消息 18
6.21 nice cmd 以低于正常优先执行命令 19
6.22 mohup cmd cmd 命令执行时不挂起 19
6.23 r ksh 下重执行前1个命令 19
6.24 resume %jobid 启动被挂起的作业 19
6.25 script file 19
6.26 set 显示当前变量值 19
6.27 sh 启动bsh 19
6.28 spell file 查找文件的拼写错误 19
6.29 4.29 stop %jobid 挂起正在运行的作业 19
6.30 4.30 stty 显示设置终端选项 19
6.31 tail file 显示文件最后10行 20
6.32 tee file 将输入复制到输出及文件file中 20
6.33 touch file 更新文件的存取时间 20
7 ed 编辑器 20
8 vi编辑器 21
9 图形界面 23
9.1 进入系统 23
9.2 终端仿真 dtterm Decterm 25
9.3 输入法设置 25
9.4 编辑器 26
9.5 其它X实用程序 26
10 编程 26
10.1 DEC FORTRAN 26
10.2 dbx技巧 27
10.3 make ,makefile, Makefile s.makefile 29
10.4 使用软盘 30
11 UNIX艺术 30
11.1 选择你钟爱shell 30
11.2 使目录间转换更容易 31
11.3 电子邮件来时通知 31
12 TCP/IP网络简介 32
12.1 IP地址 32
12.2 ftp 使用 32
12.3 telnet终端仿真 32
12.4 X终端仿真 32
13 UNIX的批处理 Shell Script 33
13.1 前言 33
13.2 将文字档设为可执行的Sh

ell Script 33
13.3 Script的基本结构及观念 34
13.4 Bourne Shell 35
13.4.1 变数 35
13.4.2 执行命令 37
13.4.3 流程控制 38
13.5 C Shell 43
13.5.1 变数 43
13.5.2 执行命令 44
13.5.3 流程控制 45
13.6 expr命令 46
13.7 test命令 47



1 UNIX起源、流派及标准
1.1 UNIX的发展简史
60年代由麻省理工学院、通用电器公司、AT&T贝尔试验室组成一个专家小组,研制一个MULICS,是一个灵活的交互式操作系统。
60年后期,BELL脱离该组织,失去了灵活的交互式操作系统。
1990年,有一个叫Ken.Tompson写了一个SPACE TRAVEL的游戏,是在PDP-7上写的,为了更有效地发挥PDP-7的强大功能,托普森和另一位科学家Dennis Ritchie开发了一个新的操作系统UNIX。此前Dennis创建了C语言。
1973年Ken和Dennis用C语言重写了UNIX。UNIX成为世界上第一个用高级语言写的操作系统。
C语言使UNIX更容易移植,移植是UNIX最重要的优越性
70年代UNIX版本不断更新,74年后,世界上所有的大学都可以以极小的代价获得UNIX的源代码,由此产生了很多重要的分支,包括一个BSD版,加州伯克利大学Berkeley Software Distribution。80年代AT&T重新命令UNIX版。
? 1973年,美国高等院校开始使用UNIX
? 1974年,Version 4
? 1976年,Version5,6
? 1978年,Bell开发出系统 III
? 1979年,Berkekey分校发布BSD 3
? 1982年,Berkekey分校发布BSD 4.2
? 1983年,Bell开发出系统V
? 1983年,Berkekey分校推出第一个内含TCPIP的BSD UNIX
? 1985年,AT&T 推出SVR2,即系统V,RELEASE 2
? 1987年,AT&T 推出SVR3
? 1989年,AT&T 推出SVR4
82年后,AT&T发布商业版,SYSTEM3以前均为内部使用。
BSD起源于1974年,伯克利研究小组毕业的学生Bill Joy开发出更好性能的UNIX。如CSH、VI、虚拟存储环境,这些性能后来被柔进了SYSTEM 5。
1974 BSD 1979 2BSD 1982 3BSD
1984 4BSD 1987 4.3BSD 4.5BSD 
在微机领域,71年分支出XENIX
81年 XENIX2.3 XENIX3.0 XENIX5.0遵守SVID
85年 AT&T宣布一个标准SVID
(Standard Called System U Imterface Defination)
85年出现SYSTEM U/386与SVID完全兼容。
当时主要的UNIX(XENIX、SYSTEMU、BSD)占80%。
BSD 一般出现在大学
SYSTEM为用于商业领域
XINIX 只用于PC
1.2 UNIX标准化
1984年欧州5家成立X/OPEN协会。
XPG3――XPG4
SPE C 1170
1985年IEEE公布POSIX 1003
1988年5月 DEC、IBM、HP 公布OSF(BSD)AES
1988年12月AT&T SUN公布UI (SYSTEM V)
1992年12月NOVELL购买USL转让给X/OPEN
1993年9月WINDOWS NT出现使OSF和UI和解,产生COSE。包括XPG4、POSIX、SUID3、SVR4.3、AES、MOTIF、TCPIP。
1.3 常见商业版本
SUN SOLORIS纯SYSTEM V
IBM AIX4.3
HP-UX
IRIX遵守POSIX
Tru64 UNIX 成熟、统一对COSE遵守最好。SPE

C1170 MACH微内核完整、大而全。
LINUX 自由软件、微内核、多平台支持各种协议。
2 DIGITAL UNIX优点
? 全64位软硬件体系结构
? 最快的64位平台
? SMP多线程共享程序、软件升级不必重新连接、内存映射文件、 单一系统映像Cluster、VLM
? 具存防崩溃性能
? 超大规模收据库访问能力,支持大于17MB的文件
? 规模可伸缩
? 低成本管理
? 最OPEN、最标准
? 支持ADVFS、LSM、CLUSTER
? 支持各种网络
? 国际化不另收费用
? 支持IEEE标准,POSIX命令及实时线程
? 支持FIPS 151 -2
? 支持ISO/IEC 9945-1 1990
? 支持X/OPEN 可移植性指南VOLUME4(XPG4)
? 支持BSD4.3 4.4
? 支持MIT XIIR5 ADK FOR XIIR6
? 支持FIPS 160(ANSI)
? 支持OSF MOTIF 1.2.3
? 支持UNIX 93
? 支持RFC
? 支持ISO 9660(CDFS)
? 支持NFS V.3
? 支持SVR4 SVR3 SVID2 SVID3
3 初次上机
3.1 进入系统
UNIX系统为多用户,多任务操作系统,有很完善的用户管理和安全机制,使用系统的每一个人都可以有一个用户名,并有一个用户识别码UID,每个用户至少属于一个用户组,可以同时属于多个用户组,组是UNIX系统为了方便用户管理而建立的一个用户集合,进入系统只需输入自己的用户名和口令,不需要输入组名。
? 主机终端
按回车键开始登录过程
? 终端服务器
按回车键登录到终端服务器
用c命令 connect 开始登录过程
? PC机
用telnet 命令
login:用户名
password :口令 (不显示出来)
PC 用Telnet 开始登录过程
? Xwindows 
输入用户名按回车
输入口令按回车
可以选择语言环境
3.2 改变口令
$ passwd 回车
old password:输入旧口令
new password :输入新口令
reenter new password :重新输入,验证
3.3 chsh 改变login shell
chsh
/bin /sh
/bin /csh
3.4 chfn 改变用户电话号码,力公室位置等信息
chfn
3.5 获得帮助
help 命令获极少的帮助
man 查有联机手册
man cmd 查看cmd详细手册
man –k keyword 查看与keyword相关的所有命令。
man n cmd
一般情况下手册被分组为1到8其8个组,某些命令在多个组中均有帮助信息,用man n 指定读取n组中的信息。
where is cmd
查看cmd的绝对路径。
echo $PATH
which cmd
查看cmd 是哪个目录的cmd
who am I whoamI
查看自己的用户名
who, w
查看当前谁在系统上
users, u
查看当前系统的用户
finger user
查看user 的信息
ps 显示当前进程状况
ps –u user 显示用户名为user 的进程状况
3.6 作业调度
命令行可加&表示后台执行
例 f 77 test.f & 在后台执行编译命令。
命令的输入和输出可重定向。
例 ls -l >dir.lis
lmf rdg --表示标

准输入或标准输出
例 zcat file.z| [cd/tmp ;tar xvf -]
前命令的结果可以作为后一个命令的输入,称为管道技术
例ps –ef | more
strings .*| grep user
作业调入前台执行
fg %job
^z 使当前作业挂起
bg %job 使作业在后台恢复执行
at 批作业
at time cmd
例 at 5pm Friday rm /tmp/*
4 UNIX文件和目录结构
4.1 文件名和目录名
必须遵守以下规则:
可采用除“1”外的任何ASCII字符
以“.”开头的文件名在普通用户看来是隐蔽的。
“.”代表当前目录,“..”代表上级目录。
特殊字符用反斜杆引导“\”
4.2 文件类型
? 普通文件
? 链
? 特殊文件,如终端、通信设备、驱动器、FIFO、SOCKET
4.3 文件系统结构
倒树结构
/为根
4.4 目录树
/.文件系统的根目录,超级用户的HOME目录
/stand UNIX引导时使用的标准程序和数据文件
/sbin UNIX引导时使用的程序
/dev 特殊设备文件
/dev/console 控制台
/dev/lp 并口打印机
/dev/rz** 硬盘块设备文件
/dev/rmton 磁带文件
/etc 系统管理及配置数据库
/opt 附加应用软件包的根
/home 用户主目录和文件
/var 系统用文件、目录、日志、记帐、邮件、假脱机
/var/adm 系统日志,记帐
/var/mail 用户邮件文件
/var/news 新闻目录
/var/opt 附加应用程序子目录
/var/tmp 临时文件
/var/spool 假脱机目录
/var/uucp Uucp日志和状态
/usr 其它用户可访问的根
/usr/bin 新的可执行程序命令
/usr/sbin 新的系统命令,可执行程序
/usr/lib 率
/usr/include 头文件
/usr/examples 例子文件
/usr/share/man 联机手册
/usr/ucb 包含Bsd Unix兼容的软件包
/usr/ibn 多国字符程序数据
4.5 目录和文件的使用
绝对路径名 以/开头,从根开始
相对路径名 其它以..,目录名,文件名开始
UNIX命令 相应DOS命令
pwd 列出当前工作目录 cd
ls 列目录内容 dir/w
ls -l dir 
ls -a dir/a
ls -r dir/s
ls -x dir/w
ls –l |more dir/p
ls –F 用符号表示简单属性
ls -q 用?表示非打印字符
cat 显示文件内容
cat file type file
cat file1 file2 file3 type file1+file2+file3
cat -n file 显示行号
cat -u file 显示非打印字符 -u 输出无缓冲
cat -r file 多个空行合为1行
cd 改变工作目录
cd usr cd dos 
cd /usr cd c:\dos
cd .. cd ..
cd ../.. cd ..\ ..
cd
mv 移动文件或目录
mv file1 file2

ren file1 file2
mv file1 dir2 move file1 dir2
mv dir1 dir2 xcopy dir1 dir2 deltree dir1
mv –i 如果目标文件存在则提示
mv -f 强制拷贝
cp 拷贝文件
cp file1 file2 copy file1 file2
cp -i file1 file2 提示覆盖
cp -r dir1 dir2 xcopy /s dir1 dir2
cp -p 属性不变
cp file1 file2 file3 file4…target 合并文件
ln 建立软链 dos 下只有用
ln source des norton tools 等工具才能实现,但chkdsk将检查出错误。
ln -s source 符号连接忽略des属性
ln -f source des
rm 删除文件或目录
rm file1 del file1
rm * del *.*
rm -r dir deltree dir
rm -i
rmdir 删除目录
 条件:目录必须是空目录
rmdir dir rd dir
mkdir 创建子目录
mkdir dir md dir
mkdir -m 指定使用mode
mkdir -p ../dir1/dir2/dir3
file 查看文件类型
file *
find 查找指定文件
find path expression
-print 打印文件所在路径
-exec cmd 对找到的文件执行cmd命令
-atime n 只查几天以前的文件
pg 分页显示文件
more 分页显示文件
lp 打印文件
lpstat 查看打印队列
lprm 删除打印作业
cancel 
4.6 文件属性
4.6.1 定义
$ ls –l
total 24094
-rw-r--r-- 1 root system 176584 Jul 5 17:09 3500install.pdf
-rw-r--r-- 1 root system 2593 Jun 13 12:48 DXsession
-rw-r--r-- 1 bin bin 2476 Apr 13 1999 GENERIC
lrwxr-xr-x 1 root system 7 May 31 16:41 bin -> usr/bin


-rw------- 1 root system 501 Jun 23 22:31 tcr2
drwxrwxrwt 3 root system 8192 Sep 3 12:59 tmp
drwxr-xr-x 29 root system 8192 Aug 31 14:22 usr
lrwxr-xr-x 1 root system 7 May 31 16:38 var -> usr/var
-rwxr-xr-x 1 root system 9549088 Jun 1 12:29 vmunix
$
使用ls –l命令显示文件的全部属性,其中第一个域反应文件的类型和访问属性,第1列为
- 表示为普通文件
d 表示为目录文件
l 该文件为连接
第2,3,4列为文件属主读,写,执行的访问标识,如第2列为-则不可读,为r 则表示可读。
第5,6,7列为文件所属组用户的读,写,执行的访问标识。
第8,9,10列为其它组用户的读,写,执行的访问标识。
第2个域为该文件的连接数,如果某目录文件的连接数越大,其子目录数就越多。
第3个域为该文件的属主。
第4个域为该文件的属组。
第5个域为该文件的大小。
第6个域为该文件的创建时间。
第7个域为该文件的文件名。
第8个域如果不空的活,则为该文件所连接文件路径。
4.6.2 改变文件访问属性
$ chmod n

nn file
$ chmod [ugo][+-][rwx] file
4.6.3 改变文件属主
$ chown user file
$ chown user:group file
4.6.4 改变文件属组
$ chgrp group file
4.6.5 更新文件访问时间
$ touch file
5 命令,重定向,管道和过滤器
5.1 命令格式
cmd [ [-option [option value] …] [parameter1] [parameter2]….
每一条Shell命令由一个命令动词或文件名开始,可以跟一个或多个命令选项,一个或多个命令叁数,按回车将命令提交到系统。大部分UNIX命令是一个可执行文件,位于环境变量PATH或path所指示的路径中。命令也可以是shell内部命令,命令还可以是自己编译连接的可执行文件或命令踋本(批处理)文件。一个命令行可以有65536个字符,如果一行写不完,可用\符号续行,在命令行中可以采用*和%等通配符。
ls
ls –l
ls –l /usr
ls –l /etc/host*
在一个命令行中可以输入多个命令,但必须用分号分隔开。
cd /usr/users/user01; ls –l; pwd
5.2 重定向
在缺省情况下,命令的输入是标准输入设备键盘,输出是标准输出设备如终端显示器,可以通过>和<将命令的输出和输入重定向到文件或其它设备。
$ ls –l >dir.txt
$ more < .login
$ echo “” > /usr/sybase/sybase.log
在缺省情况下,使用>将命令写到某文件中,如该文件不存在,本命令创建该文件,如果该文件存在,该文件的内容被本命令的输出结果覆盖。如果使用>>符号,则命令的输出被添加到该文件的后面。
5.3 管道和过滤器
UNIX命令管理将一个命令的输出作为另一个命令的输入,在同一个命令行中有多个命令,后一个命令处理前一个命令的输出。
ps –ef|grep oracle
以上命令查找命令行或用户名中含有字符串oracle的输出。 ps –ef命令输出系统中所有进程的长格式信息,通过grep oracle命令处理后,不包括oracle的行全部被过滤掉了。象grep这种命令叫过滤器。其它过滤器命令如下:
wc 统计字数,行数,词数
grep 按正规表达式进行模式检索
-i 不区别大小写
-v 不匹配的行
-n 行前加行号
-c 只输出行数
-l 只输出匹配的文件名
fgrep 只是字符串,含特殊字符时高速
grep 有限制的规则表达式,比较快
cgrep 完全正则表达式,功能最全
cut
-f 域
-d 分隔符
-b
colum 删列
colum 3.5,textfuke 删掉 3~9列
sort -b cdfmnru +关健字开始位置-关健字结束位置,输入文件
-f 不区别大小写
-m只合并
-r 降序
-u 多个相同行只输出1行
uniq 多个重复行归纳为1行
join [-an.][-e串][-j(n)(m)][-o字段][-t字符]文件1文件2
-a与文件<n>不匹配的全输出n=1,2
-e 无对应字段时输出指定串
-jnm 将文件n的第m个字段作关键字进行连接
-o


6 UNIX命令汇总
6.1 alias 别名

ksh、csh命令
alias 显示所有当前命令的别名
alias name 显示别名为name的命令
alias name cmd 置cmd命令的别名为name csh
alias name=cmd 置cmd命令的别名为name ksh
6.2 unalias 取消别名
unalias name
6.3 bg %jobid 恢复挂起的作业到后台运行
6.4 cal 显示当前日的月历
cal [[month]year]
cal 2 1996
6.5 chown owner file 改变文件属性
chown -h 改变一文件链的属性
chmod.chgrp
6.6 启动一个cshell命令解释程序
csh
6.7 date 显示和设置日期
date mmddhhmm.yy设置月日时分年
6.8 echo string 在标准输出上回显string
6.9 env 显示环境变量
env name=value 置环境变量name值为value
setenv
setenv name=value unsetenv name
6.10 exit 结束用户登录
6.11 export variable
在sh 和ksh下用户变量export后才可成为全局变量
6.12 fg %jobid将挂起的作业调入前台执行
6.13 fmt file 简单正文格式化
fmt –w width 文件输出的行宽为width
fmt –c 顶部对齐
fmt –s 防止短行合并输出
6.14 head file 显示文件头部10行
head –n file 显示头部n 行
6.15 history 显示以前被执行过的命令csh ,ksh
6.16 jobs 显示所有运行的任务
在命令行尾加&使作业在后台执行
正在执行作业时按ctrl-z (csh)使作业挂起
然后可用jobs,fg,bg等命令
6.17 kill pid 给进程发中止信号
kill-g pid 强制杀除进程
6.18 ksh 启动ksh 命令解释程序
ksh
6.19 more 命令
more file 分页显示file 内容
more –c 显示前清屏
more –s 多个空行压缩为1行
子命令
按空格:向前翻1屏
按回车:向前滚1行
b 回翻1屏
G 到多少行,缺省第1行 nG 到第n行
P% 到百分之一 np 到第n%处
m 标记一个位置 m[a-z] 命名位置
‘ 返回标记的位置 ‘[a-z]
v 运行editor 编辑文件
/.? 找一串
q exit
:n 跳到下一文件
:p 前1文件
6.20 news 查看新消息
news –a 显示所有新消息状态
news –n 显示所有新消息状态
6.21 nice cmd 以低于正常优先执行命令
nice =n cmd 设置优先级
6.22 mohup cmd cmd 命令执行时不挂起
6.23 r ksh 下重执行前1个命令
6.24 resume %jobid 启动被挂起的作业
6.25 script file
将输出、输入到终端的信息同时写入文件中,script –a 同时写入文件中,-a是添加。
6.26 set 显示当前变量值
set name=value
uset name
6.27 sh 启动bsh
sh
6.28 spell file 查找文件的拼写错误
spell –b 美国英语拼写
6.29 stop %jobid 挂起正在运行的作业
6.30 stty 显示设置终端选项
sttt –a 显示当前终

端所在选项
stty –g 显示当前设置,格式可作为stty实参
line speed 置波特率
-t type 终端类型
columns n 设置列数
6.31 tail file 显示文件最后10行
tail –n file 显示文件最后n 行
6.32 tee file 将输入复制到输出及文件file中
tee –a file 添加到file 尾
6.33 touch file 更新文件的存取时间
touch –a 只更新访问时间
touch –m 只更新修改时间
touch –c 防止建立以前不存在的文件 
7 ed 编辑器
ed file
出错时,h提供简单帮助信息,H提供详细帮助信息,用a,c,I进入输入方式,在单独一行上用,回到命令格式保存文件w. Wq =x
p .p 显示当前行
= 显示当前行的行号
np 显示第n 行
1,6p 显示1-6行
$p 显示最后一行
1,$p显示所有行
+ 显示下一行
- 显示上一行
n 显示当前行及行号
nn 显示第n行及行号
x,yn 显示x—y行及行号
l 显示当前行包括非打印字符
d 删除当前行
u 取消最后命令
s /str1/str2 用 str2 取代str1
s/str1// 删除str1
2s/str1/str2/n 第2 行的str1改为str2并显示修改后的行
s/str1/str2/g 全程替换
,m
2,4m6 第2—4行移到第6行之后
t 块拷贝格式同m
r file 将文件读到当前行后
, w file 写块到文件
!cmd 执行shell命令
/模式/ 正向查找命令
?模式?反向查找命令
// 继续找第2个
g/the/p 全程查找并显示
g/the/s/the/that/ 全程查找the并用that代替the
v与g命令相反
v/the/n 全程查找不包含the 并显示
无字符
^代表行首 $行尾 .任意字符 *任意多个与前面相同字符
/A….B/ 以A开关B结尾中间3个任意
. s/. /. 第1个 . 当前行
第2 个 . 任意字符
第3个 . 字符
s/xx*/y/ 用y代替2个或2个以上的x
s/x*y/y/ 用y代替以x开头以y结束的所有字符
&代表第1个模式内容
/模式1/(模式1)/=/模式1/(&)/
[xz]表示x或z
[0-9]表示0-9的任意数字
8 vi编辑器
vi file vi -r 只读模式 vi -r 恢复 -wnumber 指定窗 口大小
vi +67 file 光标停在第67行
命令模式 i,I,o,O,a,A进入输入模式,;/?最后一行模式
最后一行模式
:q 退出 :w写文件 :wq存盘退出 :q! Quit :x存盘退出
命令模式 zz存盘退出 如未修改不存盘退出
移动光标
l 空格 右 w W 下词词首 5w 前移5个词
h ^H 左 e E 词尾或标点
j ^N 下 b B 返回词首
k ^P 上 ) 下句句首
0 行首 ( 上句句首
& 行尾 } 下段句首
+ 下行行首 { 上段名首
- 上行行首 ]] 下区第1字符
[[ 上区第1字符
H 光标到屏幕布顶部
M 光标到屏幕布中部
L 光标到屏幕布底部
ctrl -F 向前一屏
^D

向前半屏
^B 向后一屏
^U 向后半屏
^Y 向上滚1行
^E 向下滚1行
G 文件尾, nG到第n 行
z+ 向上翻页
z^ 向下翻页
z. 当前行到中间
z- 当前行到底部
rn 用字符n代替当前字符
3rn 用n代替当前3个字符
Rstring ESC 用输入串代替当前字符
cw string ESC 用string代替当前光标到词尾的串
5cw string ESC 用string代替当前光标到第5个词尾的串
cb,CB string ESC用string替换词首到当前光标位置的串
c&string ESC 用string替换到行尾的字串
s删当前字符并开始输入正文
S 删当前行并开始输入正文
~ 改变当前字符大小写
x 删当前字符
X 删当前字符左边的字符
dw 删光标到词尾的串
d :return=dd 删两行
d [[ 删光标到区首
D=d&
fn 移到跟当前光标后面的“n”字符处
Fn 移到跟当前光标前面的“n”字符处
fn 移到跟当前光标后面的“n”字符前一列
Fn 移到跟当前光标前面的“n”字符后一列
; 继续f,F,t,T查找
, 反向f,F,t,T查找
:addr 到指定行
:set nu 当前缓冲区加行号
m [a-z] 做标记
‘a 返回原记号处
ecol 定位到指定行
J 光标所在行与下行合并
u 取消前次操作
U 光标未离开当前行之首,取消从光标移来所做的修改
p 将缓冲区内容插入光标右边,添加新行
:e! 取消最后一次写文件以来所做的所有修改
. 重复上一个命令
9 图形界面
9.1 进入系统

在此输入用户名,按回车

在此输入口令,按回车进入系统




在此可选择你所熟悉的语言环境



进入系统后,可用dtterm,DECterm,Xterm等仿真终端,输入UNIX命令。

9.2 终端仿真 dtterm Decterm

9.3 输入法设置

选择默认输入法,指定启动和停止输入法的热键,各种输入法的切换热键。退出系统并重新登录后,设置生效。
9.4 编辑器

操作与PC机Notepad完全相同
9.5 其它X实用程序
在程序组中有多级程序组。
10 编程
10.1 DEC FORTRAN
F77 [option] filename [option]
源文件以.f,.for,.FOR结尾
目标文件以.o结尾
.F结束的文件必须先用C予处理程序处理
.r和.E解释为ratfor或ef1源程序
被 cpp予处理过的源程序
.options
-o output 生成目标文件名
-v 生成l列表文件
-w1 列警告信息,包括未被使用的变量
-W
-cross-reference 列表中含交叉索引
-c 强制生成目标文件,而不生成或执行代码
-d-lines 编译第1列为D的行
-go 无符号信息
-g1 应跟踪信息,行信息缺省
-g2或-g 应符号调试信息和跟踪信息自设置 O。
-g3 应符号调试信息和跟踪信息但调试信

息不精确
-machine-code 在列表中显示机器语言信息
-o0 无优化
-o1 局部优化
-o2 全局优化包含o1
-o3 附加全局优化包含o2
-o4或o包含内部行扩展包含o3
-o5 软件管道优化
-om 连接后优化
-tune generic ︱host︱ev4︱ev5
改进针对本机或本cpu的性能,其它cpu下降
-show code 显示机器代码
-show include 显示include文件中语句
-show nomap 无符号表示
-show xvef
-warn argument-checking
-warn declaretions
-warn noalignments
-worn nogenerl
-warn nouncalled
-warn nouninitialized
-warn nounreachable
-warn truncated-sourse
-warn unused
-convert cray
-convert IBM
10.2 dbx技巧
dbx和ladebug都是UNIX下调试程序
ladebug是DEC开发的增强型符号调试程序
ladebug a.out
help 查看联机帮助
help cmd
alias 查看和设置别名
print 显示变量或内存串值 
ox140001000/100x 转贮内存
x 长字 xx双字 x字 s串 c字符 I机内代码
where 在堆栈中寻找变量值
ro 为函数返回值
r16 函数变量1
r17 函数变量2

r20 函数变量5
多于5个变量被压入栈
assign 改变内存值 
print* (long *) ox11fffff20
ox632f73756c 70322d
assign ox11fffff20=17
ox17
print* (long *)ox11fffff20
ox17
stop in stop in
stopat
file
step stepi
next nexti
cont conti
w wi
l li
程序代码位置 ox120000000
数据代码 ox140000000
set &hexin=1 所在输入均为16进制
set &hexints=1 所在输出均为16进制
&curpc
&curline
use /dir1/dir2/…
startddr,endaddr/mode
startddr,endaddr/count mode
d 10进制word
D 10进制long
o八进制word
O 八进制long
x 十六进制 word
X 十六进制 long
b 八进制 byte
c 字符 byte
s 串 Asciz
f 单精度 real
g 双精度 real
i 反汇编 指令
# 解释
!string ?string 串查找
alias ,unalias
予定义的别名
a assign f func
b stop at h history
bp stop in j status
d delete li &curpc/10I;&curpc=&curpc+40
l list
n next q quit
u: nexti r rerun
p print ri record input
pd printf “%d” ro recond ouput
po printf “%o” s step
pr printregs si stepi
ps printf “%s” u list &curline-9:10
px printf “ox%x” w list &curline-5:10
wi &curpc-20/10i W list &curline-10:20
what is 变量 delet all
where is 变量 file
which 变量 goto line
patch f00=20
patch f00=20 catch ignore信号
trace at set,useset
return source 文件名
attach
dbxinit 文件,初始化命令,设置,
10.3 make ,makefile, Makefile s.makefile
例:persee:persee.for cudl:a.o l:b.o
f>>-c-g-i8-r8-do

rble-size128-g\
-convert=cray persee.for cudl:u.0 l:b.0
cndl:u.o:cndl:u.for
f>>-c-g-i8-r8-double-size128-convert=cray\cndliu.for
l:b.o:lb.for
f>>-c-g-i8-r8-double-size128-convert=cray\l:b.for
make -b 兼容老版makefile
-d Debug 模式
-f makefile
l:b:l:b(file1.0)l:b(file2.0) l:b(file3.0)
.c.a:
&(cc)-c&(CFLAGS1)&<
ar rv $@ $*.0
rm-f $*.0
10.4 使用软盘
? 软盘文件系统
$ fddisk -fmt /dev/rfdoa
$ fddisk -fmt -f /dev /rfdoc
$ newfs /dev/fd0c rx23
$ mount /dev/fd0c /mnt
$ cp file /mnt
$ umont /mnt
? DOS格式软盘
# ln –s /dev/rfd0c /dev/fddrive
$ /usr/bin/mtools/mdir
$ /usr/bin/mtools/mcopy file a:
? 原始格式
$ tar cvf /dev/rfd0a mydirs
11 UNIX艺术
对UNIX使用时间越长,对UNIX的了解就越深入,刚开始使用时,每天都有新的发现,二三年以后逐渐开成自己的风格。
使用UNIX是一种艺术享受,而不是拦路虎,通向艺术之路。
11.1 选择你钟爱shell
每一种shell都是进入时初始执行文件。
sh ksh profile
csh login cshrc
/etc下 csh.login 所有csh用户进入时初始化
设置环境变量
设置path和manpath
设置终端参数
执行用户命令
赋置别名
例: csh 保存历史
.login set savehist=40
set term=vt320 set proupt=“hostmane\!.”
set editmode=emacs
set prompt=“‘whomni’ @‘hostname’\!>”
set history=100
setenv lang=https://www.doczj.com/doc/388030318.html,
Ksh profile
SYBASE=/usr/sybase
DS2UERY=SYBASE
EXPORT.SYBASE DS2UERY
alias 别名
alias dir ls
alias type cat
alias move “mu-i”
alias del rm
alias md mkdir
alias rd rmdir
alias deltree “rm –r”
alias ren mv
alias cipy “cp-i”
alias xcopy “cp-r”
11.2 使目录间转换更容易
set cdpath=(/usr/rsers/rser1/persee /usr/users/user1/conpate/mut /usr/examples/motif/cpuinfo)
%pwd
%/usr/users/user1
%cd mut
%pwd
%/mut
%cd persee
%pwd
/usr/users/user1/persen
pushd popd dirs
pwd
/usr/inolude
poshd sys
pwd /usr/include/sys
pushd /usr/users/user01
popd +1
pwd
11.3 电子邮件来时通知
unset mail
biff y xbiff


12 TCP/IP网络简介
12.1 IP地址
ping 195.1.1.1
ftp 195.1.1.1
telnet 195.1.1.1
使用机器名,hosts中维持1个名称和地址转换数据库格式
195.1.1.0 网络名
195.1.1.1 主机名
12.2 ftp 使用
ftp 主机/地址
user
password
ascii binary cd lcd pwd ls lpwd get put mget mput prompt vervose bye oper bye close help
12.3 telnet终端仿真
telnet hostname
Digital UNIX (https://www.doczj.com/doc/388030318.html,) (ttyp1)
login: user1
passwd:
$
设置终端属性:
$ TERM=vt100
$ export TERM
$ stty erase ‘^?’
12.4 X终端仿真
Huminbird Exc

eed
执行Xconfig,选择Communication->XDMCP-broadcast->OK,启动EXCEED,可以看到UNIX主机已在列表中。点击进入。
eXcursion
执行eXcursion control panel选择XDMCP->Enable XDMCP->选择XDMCPbroadcast,启动eXcursion,点击进入想连接的UNIX主机。

13 UNIX的批处理 Shell Script
13.1 前言
在DOS 中,你可能会从事一些例行的重覆性工作,此时你会将这些重覆性的命令写成批次档,只要执行这个批次档就等於执行这些命令。大家会问在UNIX中是否有批次处理这个东东,答案是有的。在UNIX中不只有如DOS 的批次处理,它的功能比起DOS 更强大,相对地也较复杂,已经和一般的高阶语言不相上下。在UNIX中大家都不叫做批次档,而叫做Shell Script。
一般而言,Shell Script的地位和其它的可执行档(或命令)是完全相同的,只不过Shell Script是以文字档的方式储存,而非二进位档。而执行Shell Script时,必须有一个程式将其内容转成一道道的命令执行,而这个程式其实就是Shell ,这也就是为什麽我们叫做Shell Script的原因(往後我们称为Script)。不同Shell 的Script基本上会有一些差异,所以我们不能将写给A shell 的Script用B shell 执行。而在UNIX中大家最常使用Bourne Shell以及C Shell ,所以这堂课就介绍这两种Script的写法。

13.2 将文字档设为可执行的Shell Script
如果我们已经写好Script,如何将其设成可执行档呢?因为Script其实是一个可执行档,所以必须将其存取权设定成可执行。我们可以使用下列命令更改存取权:
chmod u+x filename 只有自己可以执行,其它人不能执行
chmod ug+x filename 只有自己以及同一群可以执行,其它人不能执行
chmod +x filename 所有人都可以执行
而我们如何指定使用那一个Shell 来解释所写的Script呢?几种基本的指定方式如下所述:
1. 如果Script的第一个非空白字元不是"#",则它会使用Bourne Shell。
2. 如果Script的第一个非空白字元是"#"时,但不以"#!"开头时,则它会使用C Shell。
3. 如果Script以"#!"开头,则"#!"後面所写的就是所使用的Shell,而且要将整个路径名称指出来。
这里建议使用第三种方式指定Shell ,以确保所执行的就是所要的。Bourne Shell的路径名称为/bin/sh ,而C Shell 则为/bin/csh。




1. 使用Bourne Shell






2. 使用C Shell






3. 使用/etc/perl







除了在Script内指定所使用的Shell 外,你也可以在命令列中强制指定。比如你要用C Shell 执行某个Script,你可以下这个命令:
csh filename
此时的Script的存取权就不一定要为可执行档,其内部所指定的Shell 也会无效,详细的情形後面会讨论。

13.3 Script的基本结

构及观念
Script是以行为单位,我们所写的Script会被分解成一行一行来执行。而每一行可以是命令、注解、或是流程控制指令等。如果某一行尚未完成,可以在行末加上"\" ,这个时候下一行的内容就会接到这一行的後面,成为同一行,如下






当Script中出现"#" 时,再它後面的同一行文字即为注解,Shell 不会对其翻译。
在Script中要执行一个命令的方法和在命令列中一样,你可以前景或背景执行,执行命令时也会需要设定一些环境变数。
Script的流程控制和一般高阶语言的流程控制没有什麽两样,也和高阶语言一样有副程式。这些使得Script的功能更加强大。
为了达到与高阶语言相同的效果,我们也可以在Script中设定变数,如此使Script成为一个名付其实的高阶语言。

13.4 Bourne Shell
13.4.1 变数
Bourne Shell的变数型态只有字串变数,所以要使用数值运算则必须靠外部命令达成目的。而其变数种类有下列几种:
1) 使用者变数
这是最常使用的变数,我们可以任何不包含空白字元的字串来当做变数名称。
设定变数值时则用下列方式:
var=string
取用变数时则在变数名称前加上一"$" 号。







结果如下:
name
Tom
2) 系统变数(环境变数)
和使用者变数相似,只不过此种变数会将其值传给其所执行的命令。要将一使用者变数设定为系统变数,只要加上:
export var





┌———————┐

以下是使用者一进入系统之後就已设定好的系统变数:
$HOME 使用者自己的目录
$PATH 执行命令时所搜寻的目录
$TZ 时区
$MAILCHECK 每隔多少秒检查是否有新的信件
$PS1 在命令列时的提示号
$PS2 当命令尚未打完时,Shell 要求再输入时的提示号
$MANPATH man 指令的搜寻路径
3) 唯读的使用者变数
和使用者变数相似,只不过这些变数不能被改变。要将使用者变数设成唯读的,只要加上:
readonly var
而若只打readonly则会列出所有唯读的变数。还有一点,系统变数不可以设定成唯读的。









结果如下:
Tom
name: is read only
readonly name
readonly ......
4) 特殊变数
有些变数是一开始执行Script时就会设定,并且不以加以修改,但我们不叫它唯读的系统变数,而叫它特殊变数(有些书会叫它唯读的系统变数),因为这些变数是一执行程式时就有了,

况且使用者无法将一般的系统变数设定成唯读的。以下是一些等殊变数:
$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数
$# 这个程式的参数个数
$$ 这个程式的PID
$! 执行上一个背景指令的PID
$? 执行上一个指令的返回值
当你执行这个程式时的参数数目超过9 个时,我们可以使用shift 命令将参数往前移一格,如此即可使用第10个以後的参数。除此之外,我们可以用set 命令改变$n及$*,方法如下:
set string
如此$*的值即为string,而分解後则会放入$n。如果set 命令後面没有参数,则会列出所有已经设定的变数以及其值。

档名:ex1 参数:this is a test














结果如下:
Filename: ex1
Arguments: this is a test
No. of args.: 4
2nd arg.: is
No. of args.: 3
2nd arg.: a
Arguments: hello, everyone
2nd arg.: everyone
值得一提的是,当你想从键盘输入一变数值时,你可以使用下面的命令:
read var1 var2.....
这时read会将一个字分给一个变数。如果输入的字比变数还多,最後一个变数会将剩下的字当成其值。如果输入的字比变数还少,则後面的变数会设成空字串。
如果需要处理数值运算,我们可以使用expr命令。其参数及输出列於附录A。
13.4.2 执行命令
在Bourne Shell中有五种方法执行一个命令,而这五种方式所产生的果有些许的不同。
1) 直接下命令
这个方式和在命令列中直接下命令的效果一样。
2) 使用sh命令
sh command
这个档案必须是Bourne Shell的Script,但这个档案并不一定要设成可执行。
除此之外和直接下命令的方式一样。
3) 使用"."命令
. command
这时和使用sh命令相似,只不过它不像sh一般会产生新的process ,相反地,它会在原有的process 下完成工作。
4) 使用exec命令
exec command
此时这个Script将会被所执行的命令所取代。当这个命令执行完毕之後,这个Script也会随之结束。
5) 使用命令替换
这是一个相当有用的方法。如果想要使某个命令的输出成为另一个命令的参数时,就一定要使用这个方法。我们将命令列於两个"`" 号之间,而Shell 会以这个命令执行後的输出结果代替这个命令以及两个"`" 符号。

str='Current directory is '`pwd`
echo $str
结果如下:
Current directory is /users/cc/mgtsai
这个意思

是pwd 这个命令输出"/users/cc/mgtsai",而後整个字串代替原来的`pwd` 设定str 变数,所以str 变数的内容则会有pwd 命令的输出。


number=`expr $number + 1`
这就是先前所提要作数值运算的方法,基本上expr命令只将运算式解,而後输出到标准输出上。如果要将某变数设定成其值,非得靠命令替换的方 式不可。这个例子是将number变数的值加1 後再存回number变数。
13.4.3 流程控制
在介绍流程控制之前,我们先来看看test命令。test命令的参数是条件判断式,当条件为真时则传回非零值,而条件为伪时则传回零。在所有的流程控制都必须用到test命令来判断真伪。而test命令的使用方法则列於附录B。

test $# = 0
如果执行这个程式没有参数时,会传回非零值代表"$# = 0"这个条件成立。反之则会传回零。
以下介绍各种流程控制:
1) if then

语法如下

if (condition)
then
then-commands
fi

condition 是一个test命令。往後所介绍的各种流程中的condition 都是test命令。

档名:chkarg







$ chkarg Hello
Arg1: Hello
$ chkarg
$

2) if then else
语法以及流程图如下
│ FALSE
if (condition) <condition>————————┐
then │TRUE │
then-commands then-commands else-commands
else ├—————————┘
else-commands │
fi
3) if then elif
语法以及流程图如下
│ FALSE
if (condition1) <condition1>———┐
then │TRUE │ FALSE
commands1 commands1 <condition2>┐
elif (condition2) │ │TRUE │
then │ commands2 commands3
commands2 ├—————┴—————┘
else │
commands3
commands3
fi

echo 'word 1: \c'
read word1
echo 'word 2: \c'
read word2
echo 'word 3: \c'
read word3
if (test "$word1" = "$word2" -a "$word2" = "$word3")
then
echo 'Match: words 1,

2, & 3'
elif (test "$word1" = "$word2")
then
echo 'Match: words 1 & 2'
elif (test "$word1" = "$word3")
then
echo 'Match: words 1 & 3'
elif (test "$word2" = "$word3")
then
echo 'Match: words 2 & 3'
else
echo 'No match'
fi
4) for in
语法以及流程图如下
│ FALSE
for var in arg-list ┌—<arg-list还有东西吗?>—┐
do │ │TRUE │
commands │ 从arg-list取得一项 │
done │ 放到变数var │
│ │ │
│ commands │
└————┘ │
┌———————————┐ ┌———————┘
│for a in xx yy zz │ │
│ do │
│ echo $a │
│done │
└———————————┘
结果如下:
xx
yy
yy
zz
5) for
语法以及流程图如下
│ FALSE
for var ┌—<参数中还有东西吗?>—┐
do │ │TRUE │
commands │ 从参数中取得一项 │
done │ 放到变数var │
│ │ │
│ commands │
└—————┘ │
档名:lstarg ┌———————┘
┌———————————┐ │
│for a │
│ do │
│ echo $a │
│done │
└———————————┘
$lstarg xx yy zz
xx
yy
yy
zz
6) while
语法以及流程图如下
│ FALSE
while (condition) ┌—<condition>—┐
do │ │TRUE │
commands │ commands │
done └————┘ │

┌————┘


┌———————————————┐
│number=0 │
│while (test $number -lt 10) │
│ do │
│ echo "$number\c" │
│ number=`expr $number + 1` │
│done │
│echo │
└———————————————┘
结果如下:
0123456789
7) until
语法以及流程图如下
│ TRUE
until (condition) ┌—<condition>—┐
do │ │FALSE │
commands │ commands │
done └————┘ │
┌————┘

它和while 的不同只在於while 是在条件为真时执行回圈,而until 是在条件为假时执行回圈。
8) break及continue
这两者是用於for, while, until 等回圈控制下。break 会跳至done後方执行,而continue会跳至done执行,继续执行回圈。
9) case
语法以及流程图如下
│ TRUE
case str in <str=pat1>————commands1—┐
pat1) commands1;; │FALSE TRUE │
pat2) commands2;; <str=pat2>————commands2—┤
pat3) commands3;; │FALSE TRUE │
esac <str=pat3>———commands3—┤
│FALSE │
├————————————┘

而pat 除了可以指定一些确定的字串,也可以指定字串的集合,如下
* 任意字串
? 任意字元
[abc] a, b, 或c三字元其中之一
[a-n] 从a到n的任一字元
| 多重选择

┌———————————————┐
│echo 'Enter A, B, or C: \c' │
│read letter │
│case $letter in │
│ A|a) echo 'You entered A.';; │
│ B|b) echo 'You entered B.';; │
│ C|c) echo 'You entered C.';; │
│ *) echo 'Not A, B, or C';; │
│esac │
└———————————————┘
10) 函数
格式如下
function-name()


{
commands
}
而要呼叫此函数,就像在命令列下直接下命令一般。

13.5 C Shell
C Shell 有些特性和Bourne Shell一样,但有些不相同。这里介绍与Bourne Shell不相同的地方。

13.5.1 变数
1) 字串变数
这个部分和Bourne Shell的变数一样,只不过在设定变数值时不能使用Bourne Shell的方式,而必须打:
set var=value
2) 数字运算
基本上C Shell 没有数字变数,但C Shell 却有简单的方法处理数字运算:
@ var operator expression
operator可以是C 语言中的=, +=, -=,......,而expression则是运算式。运算式的运算子如下:
A. () 改变计算的顺序
~@
B. ~ 位元NOT运算
@~~
! 逻辑否定
C. % 取馀数
/ 除
* 乘
- 减
+ 加
D. >> 右移
<< 左移
E. > 大於
< 小於
>= 大於等於
<= 小於等於
!= 不等於
== 等於
F. & 位元AND运算
^ 位元XOR运算
| 位元OR 运算
G. && 逻辑AND
|| 逻辑OR
除此之外,我们也可以检验一个档案的状态,如下
-n filename


而-n可为下列之一
-d 档案是一个目录档案
-e 档案存在
-f 档案为一般的档案
-o 使用者拥有这个档案
-r 使用者可以读取这个档案
-w 使用者可以写入这个档案
-x 使用者可以执行这个档案
-z 档案长度为0

@ count = count + 1
@ flag = -e /users/cc/mgtsai/mail && -e /usr/spool/mail
3) 阵列
在C Shell 中,我们可以宣告阵列变数,方式如下
set var=(val1 val2 ......)
而var[1]之值为val1,var[2]之值为val2......。而$var代表整个阵列。我们可以用$#var 来计算阵列个数,也可以用$?var 来检查某个变数是否已宣告。

4) 特殊变数
$argv 和Bourne Shell的$*相似,只不过这是一个阵列。
$argv[n] 和Bourne Shell的$n相同,但不受个数限制。
$#argv 和Bourne Shell的$#相同
$home 和Bourne Shell的$HOME相同
$path 和Bourne Shell的$PATH相似,只不过这是一个阵列
$prompt 和Bourne Shell的$PS1相同
$shell Shell的路径名称
$status 和Bourne Shell的$?相同
$$ 和Bourne Shell的$$相同
$< 键盘输入

13.5.2 执行命令
基本上和Bourne Shell相同,只有一点在Bourne Shell中的".

" 命令在C Shell 中则为"source"命令。

13.5.3 流程控制


在C Shell 中流程控制不像Bourne Shell中一般需要使用test命令。相反地,它和C 语言类似只要在条件中写出运□式即可。当运算结果不为零时,其值为真,为零时其值为伪。以下是C Shell的流程控制
1) if
语法如下
if (expression) simple-command
2) goto
语法如下
goto label
这时程式会跳至以l"label:"开头的那一行执行

if ($#argv == 2) goto goodargs
echo 'Please use two arguments.'
exit
goodrags:
...


3) if then else
这和Bourne Shell的if then, if then else, if then elif 相似。语法如下
A. if (expression) then
commands
endif
B. if (expression) then
commands
else
commands
endif
C. if (expression) then
commands
else if (expression) then
commands
else
commands
endif

4) foreach
这和Bourne Shell的for in相似。语法如下
foreach var (arg-list)
commands
end
5) while
这和Bourne Shell的while相似。语法如下
while (expression)
commands
end
6) break及continue
这和Bourne Shell的break 及continue相似,是用来中断foreach 及while 回圈。
7) switch
这和Bourne Shell的case相似。语法如下
switch (string)
case pat1:
commands1
breaksw
case pat2:
commands2
breaksw
case pat3:
commands3
breaksw
endsw
13.6 expr命令

命令格式
expr expression
叙述
expression是由字串以及运算子所组成,每个字串或是运算子之间必须用空白隔开。下表是运算子的种类及功能,而优先顺序则以先後次序排列,我们可以利用小括号来改变运算的优先次序。其运算结果则输出至标准输出上。
: 字串比较。比较的方式是以两字串的第一个字母开始,而以第二个字串的字母结束。如果相同时,则输出第二个字串的字母个数,如果不同时则传回0 。
* 乘法
/ 除法
% 取馀数
+ 加法
- 减法
< 小於
<= 小於等於
= 等於
!= 不等於
>= 大於等於
> 大於
& AND运算
| OR运算
当expression中含有"*", "(", ")" 等符号时,必须在其前面加上"\" ,以免被
Shell 解释成其它意义。


expr 2 \* \( 3 + 4 \) 其输出为14



13.7 test命令

命令格式
test expression
叙述
expression中包含一个以上的判断准则以作为test评诂的标准。两准则间用"-a"代表逻辑AND 运算,"-o"代表逻辑OR运算,而在准则前放置一"!" 代表NOT 运算。如果没有括号,则优先权则为"!" > "-a" > "-o" 。和expr命令相同,相使用左右括号时,必须在其前面加上"\" 。以下是有关准则的叙述(合叙述时传回真,否则传回伪):
string string不为空白字串
-n string string的长度大於0
-z string string的长度等於0
string1=string2 string1等於string2
string1!=string2 string1不等於string2
int1 -gt int2 int1大於int2
int1 -ge int2 int1大於等於int2
int1 -eq int2 int1等於int2
int1 -ne int2 int1不等於int2
int1 -le int2 int1小於等於int2
int1 -lt int2 int1小於int2
-r filename 档案可读取
-w filename 档案可写入
-x filename 档案可执行
-f filename 档案为一般档
-d filename 档案为目录
-s filename 档案为非空的一般档
test -r "$filename" -a -s "$filename"

相关主题
文本预览
相关文档 最新文档