您好,欢迎来到99网。
搜索
您的当前位置:首页unix 指令集

unix 指令集

来源:99网
 文件

入门介绍和常用命令

如果文件系统磁盘空间不足,则可能出现停止服务等反常现象。

建议各现场系统环境维护人员要定期检查一下Domain所在文件系统的磁盘空间是否足够。 命令: df -k df -m df -g等。

历史:

BSD,SYSTEM V

主流商业版本 SUN SOLORIS IBM AIX HP-UX Tru UNIX LINUX

登录和用户管理

进入系统 login: passwd:

字符方式:

字符终端 (console,tty) telnet,term-tools

图形方式(x-window protocal): 从主机登录;

图形终端工具(reflection,hummingbird,cygwin,etc.)

Change passwd: $ passwd old password: new password : reenter new password :

修订日期:2013-4-6 第1页 共28页

文件

chsh $ chsh /bin /sh /bin /csh

User informaiton defined in /etc/passwd,readonly for ordinary users.

Get help: $ man cmd $ docsearch $ wheris cmd $ which cmd Command Search Path $ echo $PATH

查看自己的用户名 $ whoami

who ,w 查看当前谁在系统上 users, u

查看当前系统的用户 id 看登录用户 finger user 查看user 的信息 ps 显示当前进程状况

ps –u user 显示用户名为user 的进程状况 进程调度 后台运行 $ cmd &

$ cmd1;cmd2;cmd3 $ cmd1&&cmd2&&cmd3 $ cmd1||cmd2||cmd3

从后台转到前台 $ jobs #查找 $ fg %n

定时任务 at,cron $ at time cmd $ crontab –l $ crontab –e

修订日期:2013-4-6 第2页 共28页

文件

$ crontab user # root can edit other users‟ crontab

重定向和管道 stdin,stdout,stderr $ cmd >file $ cmd 利用管道来进行复杂操作。 unix文件

. 当前目录 .. 父目录 \\ 分隔符

文件类型

普通文件 链接(ln)

特殊文件,如终端、通信设备、驱动器、FIFO、SOCKET 察看文件类型 file filename

广义的文件是一个抽象概念,UNIX内核中几乎所有的操作都是用文件实现。

文件系统结构 tree

/.文件系统的根目录

/stand UNIX引导时使用的标准程序和数据文件 /sbin UNIX引导时使用的程序 /dev 特殊设备文件 /dev/console 控制台 /dev/lp 并口打印机

/dev/hdiskn(/dev/diskn) 硬盘块设备文件 /dev/rmton 磁带文件

/etc 系统管理及配置数据库 /opt 附加应用软件包的根 /home 用户主目录和文件

/var 系统用文件、目录、日志、记帐、邮件、假脱机 /var/adm 系统日志,记帐 /var/mail 用户邮件文件 /var/news 新闻目录

/var/opt 附加应用程序子目录 /var/tmp 临时文件 /var/spool 假脱机目录

修订日期:2013-4-6 第3页 共28页

文件

/var/uucp Uucp日志和状态 /usr 其它用户可访问的根 /usr/bin 新的可执行程序命令 /usr/sbin 新的系统命令,可执行程序 /usr/lib 库 /usr/include 头文件 /usr/examples 例子文件 /usr/share/man 联机手册

/usr/ucb 包含Bsd Unix兼容的软件包 /usr/ibn 多国字符程序数据

目录和文件系统 $ mount $ umount

目录和文件命令 绝对路径名

/pathl1/pathl2/filename 相对路径名

./pathln/filename ./filename /pathln/filename

文件命令

$ pwd $ ls $ ls –l $ ls -a $ ls –l |more

cat 显示文件内容 $ cat file

$ cat file1 file2 file3 $ cat -n file 显示行号

$ cat -u file 显示非打印字符 -u 输出无缓冲 $ cat -r file 多个空行合为1行

cd 改变工作目录 $ cd usr $ cd /usr

修订日期:2013-4-6 第4页 共28页

文件

$ cd .. $ cd ../.. $ cd

mv 移动文件或目录 $ mv file1 file2 $ mv file1 dir2 $ mv dir1 dir2

$ mv –i 如果目标文件存在则提示 $ mv -f 强制拷贝

cp 拷贝文件 $ cp file1 file2

$ cp -i file1 file2 提示覆盖 $ cp -r dir1 dir2 $ cp -p 属性不变

ln 建立链接 $ ln source des

$ ln -s source 符号连接 $ ln -f source des

rm 删除文件或目录 $ rm file1 $ rm * $ rm -r dir $ rm -i

$ rmdir 删除目录 条件:目录必须是空目录 rmdir dir

mkdir 创建子目录 $ mkdir dir

$ mkdir -m 指定使用mode

$ mkdir -p ../dir1/dir2/dir3 创建中间目录

file 查看文件类型 $file *

find 查找指定文件 $ find path expression -print 打印文件所在路径

-exec cmd 对找到的文件执行cmd命令 -atime n 只查几天以前的文件

修订日期:2013-4-6 第5页 共28页

文件

pg 分页显示文件 more 分页显示文件 打印: lp 打印文件 lpstat 查看打印队列 lprm 删除打印作业 cancel

文件属性 定义 $ ls –l total 360

drwxr-xr-x 3 root system 256 Jul 19 17:31 HTTPServer drwxr-xr-x 2 root system 4096 Jul 19 17:41 TT_DB drwxr-xr-x 2 bin bin 256 Jul 19 17:26 X11R6

lrwxrwxrwx 1 root adm 8 Jul 19 17:07 adm -> /var/adm drwxr-xr-x 3 bin bin 256 Jul 19 17:07 aix drwxr-xr-x 7 bin bin 256 Jul 13 2004 artic960 drwxr-xr-x 4 bin bin 40960 Jul 21 00:16 bin drwxr-xr-x 4 bin bin 256 Jul 17 2004 ccs

lrwxrwxrwx 1 bin bin 15 Jul 20 06:51 dict -> /usr/share/dict lrwxrwxrwx 1 root system 17 Jul 19 17:12 doc -> /opt/freeware/doc drwxr-xr-x 21 bin bin 4096 Jul 17 2004 dt drwx------ 4 root system 256 Jul 19 17:34 emgrdata drwxr-xr-x 3 root system 256 Jul 08 2004 es drwxr-xr-x 3 root system 4096 Jul 20 06:51 etc drwxr-xr-x 11 bin bin 4096 Jul 21 00:16 idebug drwxr-xr-x 31 bin bin 16384 Jul 21 00:16 include drwxr-xr-x 10 bin bin 4096 Jul 20 09:23 java14 $

使用ls –l命令显示文件的全部属性,其中第一个域反应文件的类型和访问属性,第1列为- 表示为普通文件

d 表示为目录文件 l 该文件为连接

第2,3,4列为文件属主读,写,执行的访问标识,如第2列为-则不可读,为r 则表示可读。 第5,6,7列为文件所属组用户的读,写,执行的访问标识。 第8,9,10列为其它组用户的读,写,执行的访问标识。

第2个域为该文件的连接数,如果某目录文件的连接数越大,其子目录数就越多。

修订日期:2013-4-6 第6页 共28页

文件

第3个域为该文件的属主。 第4个域为该文件的属组。 第5个域为该文件的大小。 第6个域为该文件的创建时间。 第7个域为该文件的文件名。

第8个域如果不空的活,则为该文件所连接文件路径。

改变文件访问属性 $ chmod nnn file

$ chmod [ugo][+-][rwx] file

改变文件属主 $ chown user file $ chown user:group file

改变文件属组

$ chgrp group file 更新文件访问时间

$ touch file

命令,重定向,管道和过滤器 命令格式

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 重定向

在缺省情况下,命令的输入是标准输入设备键盘,输出是标准输出设备如终端显示器,可以通过>和<将命令的输出和输入重定向到文件或其它设备。 $ ls –l >dir.txt $ more < .login $ echo “” > a.txt

修订日期:2013-4-6 第7页 共28页

文件

在缺省情况下,使用>将命令写到某文件中,如该文件不存在,本命令创建该文件,如果该文件存在,该文件的内容被本命令的输出结果覆盖。如果使用>>符号,则命令的输出被添加到该文件的后面。

管道和过滤器

UNIX命令管理将一个命令的输出作为另一个命令的输入,在同一个命令行中有多个命令,后一个命令处理前一个命令的输出。 ps –ef|grep oracle

其它过滤器命令如下: wc 统计字数,行数,词数 grep 按正规表达式进行模式检索 -i 不区别大小写 -v 不匹配的行 -n 行前加行号 -c 只输出行数 -l 只输出匹配的文件名

fgrep 只是字符串,含特殊字符时高速 grep 有的规则表达式,比较快 cgrep 完全正则表达式,功能最全 cut

-f 域 -d 分隔符 -b

sort -b cdfmnru +关健字开始位置-关健字结束位置,输入文件 -f 不区别大小写 -m 只合并 -r 降序

-u 多个相同行只输出1行

uniq 多个重复行归纳为1行 paste 合并列

修订日期:2013-4-6 第8页 共28页

文件

Tips:

网络地址 ifconfig

/etc 文件

Hosts,services,mount table,etc

查看空间: df,du 资源:

vmstat,sar,iostat,netstat other:ps

UNIX命令汇总

1 alias 别名 ksh、csh命令 alias 显示所有当前命令的别名 alias name 显示别名为name的命令

alias name cmd 置cmd命令的别名为name csh alias name=cmd 置cmd命令的别名为name ksh unalias 取消别名 unalias name

bg %jobid 恢复挂起的作业到后台运行

cal 显示当前日的月历 cal [[month]year] cal 2 1996

date 显示和设置日期

date mmddhhmm.yy设置月日时分年

chown owner file 改变文件属性 chown -h 改变一文件链的属性

修订日期:2013-4-6 第9页 共28页

文件

chmod.chgrp

启动一个cshell命令解释程序 csh

echo string 在标准输出上回显string

env 显示环境变量

set name=value setenv name=value unsetenv name

exit 结束用户登录

export variable

name=value export name

在sh 和ksh下用户变量export后才可成为全局变量

fg %jobid将挂起的作业调入前台执行 fmt file 简单正文格式化

fmt –w width 文件输出的行宽为width fmt –c 顶部对齐

fmt –s 防止短行合并输出

head file 显示文件头部10行

head –n file 显示头部n 行 history 显示以前被执行过的命令csh ,ksh jobs 显示所有运行的任务

在命令行尾加&使作业在后台执行 正在执行作业时按ctrl-z (csh)使作业挂起 然后可用jobs,fg,bg等命令

kill pid 给进程发中止信号 kill -9 pid 强制杀除进程

ksh 启动ksh 命令解释程序 ksh

more 命令

more file 分页显示file 内容 more –c 显示前清屏 more –s 多个空行压缩为1行

修订日期:2013-4-6 第10页 共28页

文件

子命令

按空格:向前翻1屏 按回车:向前滚1行 b 回翻1屏

G 到多少行,缺省第1行 nG 到第n行 P% 到百分之一 np 到第n%处 m 标记一个位置 m[a-z] 命名位置 ‘ 返回标记的位置 ‘[a-z] v 运行editor 编辑文件 /.? 找一串 q exit

:n 跳到下一文件 :p 前1文件

news 查看新消息

news –a 显示所有新消息状态 news –n 显示所有新消息状态

nice cmd 以低于正常优先执行命令 nice =n cmd 设置优先级

nohup cmd cmd 命令执行时不挂起 resume %jobid 启动被挂起的作业

script file

将输出、输入到终端的信息同时写入文件中,script –a 同时写入文件中,-a是添加。(new shell created,stop script when exit the new shell) .

sh 启动bsh sh

spell file 查找文件的拼写错误 spell –b 美国英语拼写

stop %jobid 挂起正在运行的作业 stty 显示设置终端选项

stty –a 显示当前终端所在选项

stty –g 显示当前设置,格式可作为stty实参 line speed 置波特率 -t type 终端类型 columns n 设置列数

tail file 显示文件最后10行

修订日期:2013-4-6 第11页 共28页

文件

tail –n file 显示文件最后n 行

tee file 将输入复制到输出及文件file中 tee –a file 添加到file 尾

touch file 更新文件的存取时间 touch –a 只更新访问时间 touch –m 只更新修改时间

touch –c 防止建立以前不存在的文件

编辑器

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 将文件读到当前行后

修订日期:2013-4-6 第12页 共28页

文件

, 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的任意数字

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 光标到屏幕布底部

修订日期:2013-4-6 第13页 共28页

文件

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! 取消最后一次写文件以来所做的所有修改 . 重复上一个命令

修订日期:2013-4-6 第14页 共28页

文件

图形界面 进入系统

输入用户名,按回车 输入口令,按回车进入系统

选择语言环境

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

终端仿真 dtterm 编辑器

操作与PC机Notepad完全相同

UNIX环境 选择你钟爱shell

每一种shell都是进入时初始执行文件。 sh ksh .profile

csh .login .cshrc /etc下 csh.login 所有csh用户进入时初始化

设置环境变量 设置path和manpath

LIBPATH,LD_LIBRARY_PATH

telnet终端仿真 telnet hostname

Digital UNIX (dec3000.newdesign.com.cn) (ttyp1) login: user1 passwd: $

设置终端属性: $ TERM=vt100 $ export TERM

$ stty erase „^H‟

修订日期:2013-4-6 第15页 共28页

文件

X终端仿真 Huminbird Exceed

执行Xconfig,选择Communication->XDMCP-broadcast->OK,启动EXCEED,可以看到UNIX主机已在列表中。点击进入。

eXcursion

执行eXcursion control panel选择XDMCP->Enable XDMCP->选择XDMCPbroadcast,启动eXcursion,点击进入想连接的UNIX主机。

Shell 脚本

Set Shell Script executable.

chmod u+x filename 只有自己可以执行,其它人不能执行

chmod ug+x filename 只有自己以及同一群可以执行,其它人不能执行 chmod +x filename 所有人都可以执行

使用Bourne Shell 使用C Shell 使用 /etc/perl sh filename

Script的基本结构及观念 Script是以行为单位,以 \\ 续行 \"#\":注释行 。

在Script中要执行一个命令的方法和在命令列中一样,你可以前景或背景执行,执行命令时也会需要设定一些环境变量。

Script有程序流程控制,和一般高级语言类似。

支持顺序、分支、循环等程序结构,支持变量,子程序等。

修订日期:2013-4-6 第16页 共28页

文件

Bourne Shell 变量

Bourne Shell的变量型态只有字串变量,所以要使用数值运算则必须靠外部命令达成目的。而其变量种类有下列几种: 1) 变量

设定变量值时则用下列方式: var=string

取用变量时则在变量名称前加上一\"$\" 号。

2) 环境变量

和用户变量相似,只不过此种变量会将其值传给其所执行的命令。要将一用户变量设定为系统变量,只要加上: export var

以下是使用者一进入系统之後就已设定好的系统变量: $HOME 使用者自己的目录 $PATH 执行命令时所搜寻的目录 $TZ 时区

$MAILCHECK 每隔多少秒检查是否有新的信件 $PS1 在命令列时的提示号

$PS2 当命令尚未打完时,Shell 要求再输入时的提示号 $MANPATH man 指令的搜寻路径 3) Readonly的用户变量

和用户变量相似,只不过这些变量不能被改变。只要加上: readonly var

而若只打readonly则会列出所有唯读的变量。还有一点,系统变量不可以设定成唯读的。

4)特殊变量

有些变量是一开始执行Script时就会设定,并且不以加以修改,但我们不叫它唯读的系统变量,而叫它特殊变量(有些书会叫它唯读的系统变量),因为这些变量是一执行程式时就有了,况且使用者无法将一般的系统变量设定成唯读的。以下是一些等殊变量: $0 这个程式的执行名字

$n 这个程式的第n个参数值,n=1..9 $* 这个程式的所有参数 $# 这个程式的参数个数 $$ 这个程式的PID

$! 执行上一个背景指令的PID $? 执行上一个指令的返回值

当你执行这个程式时的参数数目超过9 个时,我们可以使用shift 命令将参数往前移一格,如此即可使用

修订日期:2013-4-6 第17页 共28页

文件

第10个以後的参数。除此之外,我们可以用set 命令改变$n及$*,方法如下: set string

如此$*的值即为string,而分解後则会放入$n。如果set 命令後面没有参数,则会列出所有已经设定的变量以及其值。

file: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。

执行命令

在Bourne Shell中有五种方法执行一个命令,而这五种方式所产生的果有些许的不同。

直接下命令

这个方式和在命令列中直接下命令的效果一样。 使用sh命令

sh command

这个档案必须是Bourne Shell的Script,但这个档案并不一定要设成可执行。 除此之外和直接下命令的方式一样。 3) 使用\".\"命令

. command

这时和使用sh命令相似,只不过它不像sh一般会产生新的process ,相反地,它会在原有的process 下完成工作。

4) 使用exec命令

exec command

此时这个Script将会被所执行的命令所取代。当这个命令执行完毕之後,这个Script也会随之结束。

5) 使用命令替换

这是一个相当有用的方法。如果想要使某个命令的输出成为另一个命令的参数时,就一定要使用这个方

修订日期:2013-4-6 第18页 共28页

文件

法。我们将命令列於两个\"`\" 号之间,而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

语法以及流程图如下

修订日期:2013-4-6 第19页 共28页

文件

│ 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

语法以及流程图如下

修订日期:2013-4-6 第20页 共28页

文件

│ 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

修订日期:2013-4-6 第21页 共28页

文件

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 │ └———————————————┘ 结果如下: 01234567 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 除了可以指定一些确定的字串,也可以指定字串的集合,如下 * 任意字串

修订日期:2013-4-6 第22页 共28页

文件

? 任意字元

[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 }

而要呼叫此函数,就像在命令列下直接下命令一般。 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. () 改变计算的顺序

修订日期:2013-4-6 第23页 共28页

文件

~@

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) 数组

声明数组变量

set var=(val1 val2 ......)

而var[1]之值为val1,var[2]之值为val2......。而$var代表整个阵列。我们可以用$#var 来计算阵列个数,也可以用$?var 来检查某个变量是否已宣告。

修订日期:2013-4-6 第24页 共28页

文件

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

修订日期:2013-4-6 第25页 共28页

文件

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

expr命令

命令格式

expr expression 叙述

expression是由字串以及运算子所组成,每个字串或是运算子之间必须用空白隔开。下表是运算子的

修订日期:2013-4-6 第26页 共28页

文件

种类及功能,而优先顺序则以先後次序排列,我们可以利用小括号来改变运算的优先次序。其运算结果则输出至标准输出上。

: 字串比较。比较的方式是以两字串的第一个字母开始,而以第二个字串的字母结束。如果相同时,则输出第二个字串的字母个数,如果不同时则传回0 。 * 乘法 / 除法 % 取馀数 + 加法 - 减法 < 小於 <= 小於等於 = 等於 != 不等於 >= 大於等於 > 大於 & AND运算 | OR运算

当expression中含有\"*\等符号时,必须在其前面加上\"\\\" ,以免被Shell 解释成其它意义。

expr 2 \\* \\( 3 + 4 \\) 其输出为14 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 档案可读取

修订日期:2013-4-6 第27页 共28页

文件

-w filename 档案可写入 -x filename 档案可执行 -f filename 档案为一般档 -d filename 档案为目录 -s filename 档案为非空的一般档 test -r \"$filename\" -a -s \"$filename\"

修订日期:2013-4-6 第28页 共28页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务