入门介绍和常用命令
如果文件系统磁盘空间不足,则可能出现停止服务等反常现象。
建议各现场系统环境维护人员要定期检查一下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 . 当前目录 .. 父目录 \\ 分隔符 文件类型 普通文件 链接(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 全程替换 2,4m6 第2—4行移到第6行之后 t 块拷贝格式同m r file 将文件读到当前行后 修订日期:2013-4-6 第12页 共28页 文件 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 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 │ 语法以及流程图如下 │ FALSE for var ┌—<参数中还有东西吗?>—┐ do │ │TRUE │ commands │ 从参数中取得一项 │ done │ 放到变量var │ │ │ │ │ commands │ 语法以及流程图如下 │ 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 解释成其它意义。 命令格式 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 档案为非空的一般档 修订日期:2013-4-6 第28页 共28页
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务