版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux shell1.1 shell 变量为使shell编程更有效,系统提供了一些shell变量。变量可以定制用户本身的工作环境。使 用变量可以保存有用信息,使系统获知用户相关设置;变量也用于保存暂时信息。有两种变量:本地变量和环境变量。本地变量本地变量在用户现在的Shell生命期的脚本中使用。要设置一本地变量,格式为: variable-name = value or $variable-name=value定义变量:可以使用export来定义导出一变量,export variable-name=”variable-value”显示变量:使用echo命令可以显示单个变量值,echo $v
2、ariable-name清除变量:使用unset命令清除变量,unset variable-name显示所有变量:使用set显示所有本地定义的shell变量;使用env显示所有shell变量。例子:$ export MYNAME=hongdy$ echo $MYNAMEhongdy$ env$ set$ unset MYNAME环境变量环境变量用于所有用户进程(子进程),登录进程为父进程。Shell中执行的用户进程均为子进 程。最好在.profile中定义,系统在/etc/profile文件中已经设置了一些环境变量。设置环境变量:使用export导出环境变量,export VARIABLE-N
3、AME显示环境变量:使用echo命令可以显示环境变量,echo $(VARIABLE-NAME)清除环境变量:使用unset命令清除环境变量,unset VARIABLE-NAME显示所有环境变量:env显示所有环境变量F面显示的是Shell的一些基本环境变量变量说明SHELL变量保存缺省shell,在/etc/passwd中设置TERM保存终端类型TZ时区变量保存时区值HOME用于保存注册目录的完全路径名UID当前用户的标识符,取值是由数字构成的字符串PWD当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化PS1主提示符,在root用户缺省的主提示符是“#”,普通用户缺省是“$”P
4、S2在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“”然后回车,或 者当用户按回车键时shell判断出用户输入的命令没有结束时,显示这个辅助提示符,提 示用户继续输入命令的其余部分,缺省的辅助提示符是“”位置变量位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量,是在程序名之后 输入的参数。位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,第 二个替换$2,依次类推。$0是一个特殊的变量,它的内容是当前这个shell程序的文件名即 脚本名。每个访问参数前要加&符号,第一个参数为0,表示预留保存实际脚本名字。比如向脚本传送I love y
5、ou$0&1&2&3脚本名字Iloveyou例子:$ vi findfile#!/bin/shfind / -name $1 -print$ chmod a+x findfile$ ./findfile /etc/passwd特定变量参数参数含义$#传递到脚本的参数个数$*所有位置参数的内容$脚本运行的当前进程ID号$!后台运行的最后一进程的进程ID号$0当前执行的进程名$与$#相同,但在使用时要加引号$?命令执行后返回的状态一般为01.2 shell输入和输出在shell脚本中,可以用几种不同的方式读入数据:可以使用标准输入一缺省为键盘,或者 指定一个文件作为输入。对于输出也是一样:如果不指
6、定某个文件作为输出,标准输出总是 和终端屏幕相关联。(1) echo使用echo命令可以显示文本或者把字符串输入到文件。 $ echo stringc不换行;t跳格;n换行;-n选项禁止echo命令输出后换行,-e使转义符生效。(2) readRead语句从键盘或文件的某一行文本中读入信息,并将其付给一个变量,空格作为分隔符。(3) catcat是一个简单而通用的命令,可以用它来显示文件内容,创建文件,还可以用它来显示控 制字符。例子:$ export NAME=hongdy$ echo $NAMEhongdy在使用cat命令时要注意,它不会在文件分页符处停下来;它会一下显示完整个文件。如果
7、希望每次显示一页,可以使用more命令或把cat命令的输出通过管道传递到另外一个具有 分页功能的命令中,比如:$ cat myfile I more如果希望创建一个新文件,并向其中输入内容,cat命令把标准输出重定向到该文件中,标 准输入是键盘,输入完毕按ctrl+D结束输入。cat myfilehongdy /输入的内容,然后回车ctrl+d /结束输入返回(4) pipe可以通过管道把一个命令的输出传递给另一个命令作为输入,管道用竖杠丨表示。 管道一般形式为:命令1 I命令2比如:$ Is I grep *.txt 在Is结果中搜索txt文件(5) teetee命令作用可以用字母T来形象地
8、表示。它把输出的一个副本输送到标准输出,另一个副 本拷贝到相应的文件中。tee命令的一般形式:tee -a files-a表示追加到文件末尾比如:$ ls I tee result将ls结果显示到标准输出,同时拷贝到文件中。(6)重定向标准输入是文件描述符0;标准输出是文件描述符1;标准错误是文件描述符2$ command lfilename/把标准输出重定向到一个文件中$ command filename 2&1/把标准输入和标准错误一起重定向到一个文件中$ command result 2&1gerp的结果将标准错误重定向到标准输出。1.3后台执行命令使某些进程在后台运行,也就是说不在终端
9、屏幕上运行。后台执行命令有以下四种:命令含义cron系统调度进程,使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同 时段运行&使用它在后台运行一个占用时间不长的进程nohup使用它在后台运行一个命令,即使在用户退出时也不受影响atat命令,在一个特定的时间运行一些特殊的作业,或在非负荷高峰时间段或高峰负荷时 间段运行(1) croncron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron是Linux的内置服务,但它不自动启动,Linux的内置服务,但它不自动启动,/sbin/service crond start/sbin/service cro
10、nd stop/sbin/service crond restart/sbin/service crond reload可以用以下的方法启动、关闭这个服务:启动服务关闭服务重启服务重新载入配置也可以将这个服务在系统启动的时候自动启动。比如:在/etc/rc.d/rc.local 这个脚本的末尾加上 /sbin/service crond startcrontab 命令crontab 命令的一般形式为:crontab -u user -e -l-r-u用户名;-e编辑crontab文件;-l列出crontab文件中的内容;-r删除crontab文件。cron服务提供crontab命令来设定cro
11、n服务的,以下是这个命令的一些参数与说明:crontab -u/设定某个用户的cron服务,一般root用户在执行此命令的时候需要此参数crontab -l/列出某个用户cron服务的详细内容crontab -r/删除某个用户的cron服务crontab -e/编辑某个用户的cron服务例子:root 查看自己的 cron 设置:# crontab -u root -lroot 删除 hongdy 用户的 cron 设置:# crontab -u hongdy -r在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e,进入vi编 辑模式,编辑的内容一定要
12、符合下面的格式:*/1 * * * * ls /tmp/ls.txt这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多, 可以把这些命令写到一个脚本文件,然后在这里直接调用这个脚本文件,调用的时候写出命 令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下: 分钟(0-59);小時(0-23);日期(1-31);月份(1-12);星期(0-6)/0代表星期天除了数字还有几个特殊的符号就是*”、/和-、,,*代表所有的取值范围内的数字,/代 表每的意思,”*/5表示每5个单位,-代表从某个数字到某个数字,分开几个离散的数字。例
13、子:每天早上6点0 6 * * * echo Good morning. /tmp/test.txt每两个小时0 */2 * * * echo Have a rest /tmp/testl.txt晚上11点到早上8点之间每两个小时,早上八点0 23-7/2, 8 * * * echo Have a good dream /tmp/test3.txt每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点0 11 4 * 1-3 echo Have a rest /tmp/test4.txt1月1日早上4点0 4 1 1 * echo Have a rest /tmp/test5.txt每次编辑完某个
14、用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的 文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用 crontab -e来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。 因此此文件修改后不需要重新启动cron服务。(2) at命令at命令允许用户向cron守护进程提交作业,使其在稍后的时间运行。这里稍后的时间可能 是指10 min以后,也可能是指几天以后。如果你希望在一个月或更长的时间以后运行,最 好还是使用crontab文件。一旦一个作业被提交,a t命令将会保留所有当前的环境变量。At命令
15、at 命令的基本形式为:at -f script -m -l -r time date其中:-fscript是所要提交的脚本或命令。-m作业完成后给用户发邮件。-1列出当前所有等待运行的作业。-r清除作业。为了清除某个作业,还要提供相应的作业标识(ID)。time at命令的时间格式非常灵活;可以是H、HH . HHMM、HH:MM或H:M,其中H和M 分别是小时和分钟。还可以使用a . m .或p . m .。date日期格式可以是月份数或日期数,而且at命令还能够识别诸如today之类的词。使用at命令提交作业有几种不同的形式:可以通过命令行方式,也可以使用a t命令提示符。 如果你想提交
16、若干行的命令,可以在at命令后面跟上日期/时间并回车。然后就进入了 at命 令提示符,这时只需逐条输入相应的命令,然后按vCTRL-D退出。例子:提交作业# at 10:50at find / -name “passwd -printat 其中 就是 。列出提交的作业# at -1清除作业$atrm job no或 at -r job no要清除某个作业,首先要执行at -1命令,以获取相应的作业标识,然后对该作业标识使用 at -r命令,清除该作业。&命令当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。 可以使用&命令把作业放到后台执行。该命令的一般形式为:命令
17、&(4) nohup 命令如果正在运行一个进程,而且觉得在退出帐户时该进程还不会结束,那么可以使用nohup 命令。该命令可以在你退出帐户之后继续运行相应的进程。Nohup就是不挂起的意思(no hang up)。nohup 命令的一般形式为:nohup command &1.4正则表达式使用shell时,从一个文件中抽取多于一个字符串将会很麻烦。例如:在一个文本中抽取一 个词,它的头两个字符是大写的,后面紧跟四个数字。如果不使用某种正则表达式,在shell 中将不能实现这个操作。基本元字符集及其含义元字符含义只匹配行首$只匹配行尾*一个单字符后紧跟*,匹配0个或多个此单字符匹配口内字符。可以
18、是一个单字符,也可以是字符序列。可以使用-表示口内字符序列 范围,如用1-5 代替12345去应有意义匹配任意单字符patternn只用来匹配前面pattern出现次数,n为次数patternn, m含义同上,但次数最少为npatternn, m含义同上,但pattern出现次数在n与m之间使用句点匹配单字符句点“”可以匹配任意单字符。例如:如果要匹配一个字符串,以beg开头,中间夹一个 任意字符,那么可以表示为beg.n,“.”可以匹配字符串头,也可以是中间任意字符。在行首以人匹配字符串或字符序列人只允许在一行的开始匹配字符或单词。在行尾以$匹配字符串或字符可以说$与人正相反,它在行尾匹配字
19、符串或字符,$符号放在匹配单词后。假定要匹配以单 词txt结尾的所有行txt$使用*匹配字符串中的单字符或其重复序列使用此特殊字符匹配任意字符或字符串的重复多次表达式。例如:compu*t将匹配字符u 次或多次。使用屏蔽一个特殊字符的含义有时需要查找一些字符或字符串,而它们包含了系统指定为特殊字符的一个字符。什么是特殊字符? 一般意义上讲,下列字符可以认为是特殊字符:$ .“” +?| ()假定要匹配包含字符“”的各行而“”代表匹配任意单字符的特殊字符,因此需要屏蔽其 含义。操作如下: 不认为反斜杠后面的字符是特殊字符,而是一个普通字符即句点。如果要在正则表达式中匹配以*.txt结尾的所有文件
20、,可做如下操作:*.txt即可屏蔽字符 *的特定含义。使用匹配模式结果出现的次数使用*可匹配所有匹配结果任意次,但如果只要指定次数,就应使用 ,此模式有三种形 式,即:patternin匹配模式出现n次。patternn,匹配模式出现最少n次。patternn,m匹配模式出现n到m次之间,n , m为0 - 2 5 5中任意整数。grep全局正则表达式版本grep允许对文本文件进行模式查找,可以和正则表达式一起使用。grep 一般格式:grep 选项基本正则表达式文件基本正则表达式可为字符串。在grep命令中输入字符串参数时,最好将其用双引号括起来。 有两个原因,一是以防被误解为shell命令
21、,二是可以用来查找多个单词组成的字符串。常用的grep选项:选项含义-c只输出匹配行的计数-i不区分大小写-h查询多文件时不显示文件名-l查询多文件时只输出包含匹配字符的文件名-n显示匹配行及行号-s不显示不存在或无匹配文本的错误信息-v显示不包含匹配文本的所有行-R递归进入子目录缺省情况下,grep是大小写敏感的,如要查询大小写不敏感字符串,必须使用-i开关。 精确匹配:每个匹配模式中抽取字符串后有一个vTab键;使用grep抽取精确匹配的一种更 有效方式是在抽取字符串后加。使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用正则 表达式时最好用单引号括起来,这样可以
22、防止grep中使用的专有模式与一些shell命令的特 殊方式相混淆。例子:# grep -R -n -s “hongdy /etc查找/etc目录下所有包含hongdy的文件。-R表示递归查找etc下的所有目录;-n表示显示 匹配行及行号;-s表示不显示不存在或无匹配文件的错误信息。trtr用来从标准输入中通过替换或删除操作进行字符转换,主要用于删除文件中控制字符或进 行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时, 字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。tr 命令的一般格式:tr -c -d -s “string_to_
23、translate_ftom “string2_translate_to file-c用字符串1中字符集的补集替换此字符集-d删除字符串1中所有的输入字符-s输出有重复出现的字符序列,只保留第一个。-s删除重复出现的字符$ tr $ tr s “a-z” file去除文件file中所有重复字母删除空行使用删除空行使用-S,换行的八进制表示为012或使用换行速记方式n。$ tr $ tr -s “012 test.txt$ tr -s “n” file2 file2删除指定字符结合使用-C和-S选项。$ tr-cs “A-Za-z” “012*” file/删除文件中所有数字,只保留字母。转换控
24、制字符tr的第一个功能就是转换控制字符,特别是从dos向UNIX转换。 使用cat-v显示控制字符。$ cat -v test.txtZhou AAAAAA12AMXuAAAAAA50AMHongAAAA100AMAZAAAAAA,是tab键。每一行以Ctrl-M结尾,文件结尾Ctrl-Z。查看ASCII表,人的八进制代码是136, am是015, tab键是01, 口是032$ tr -s “136” “011*” test.txt$ tr s “015032” “n” 允许多台编辑。-h,-help打印帮助,并显示bug列表的地址。-n, -quiet, -silent取消默认输出。-f,
25、 -filer=script-fil引导 sed 脚本文件名。-V, -version打印版本和版权信息。替换命令语法格式:sed s/old/new/flags file文件file中内容old用new替换。Flags: g表示对全局进行替换;w file:表示匹配行的内容写到另一个文件中。例如:$ sed s/unix/Linux/g,file 文件 file 中所有内容 unix 都用 Linux 替换$ sed s/unix/Linux/w 11,file文件file中所有内容unix都用Linux替换并将结果写入11删除命令语法格式:sed addressd file 删除文件fil
26、e中address表达的内容例如:$ sed .aa/d file$ sed $/d file$ sed 10d file删除文件file中以.aa开头的内容 删除文件file中空行的内容 删除文件file中第10行的内容。追加命令语法格式:sed addressatext file文件file中address表达的行后面添加text内容例如:$ sed 10aabcd file在文件file中的第10行后面追加一行abed字符$ sed 7unix/aabcd file在文件file中所有出现unix字符的行后面追加一行abed字符$ sed /unix/aabcdndcba file在文件
27、file中出现unix字符行后面追加两行字符:abed和deba。插入命令语法格式:sed addressitext file文件file中address表达内容行前面插入text内容。例如:$ sed 7unix/iabcd file在文件file中unix行前面插入abcd字符更改命令语法格式:sed addressctext file文件file中address表达内容的行用text代替。例如:$ sed 1caaaa file 将文件file中第一行的内容更改为aaaa.打印行号语法格式:sed address= file打印 文件file中address表达内容的行号例如:$ sed
28、 7unix/= file打印文件file中包含unix字符的行号。不包含unix字符的行不打印行号。读写文件语法格式:sed addressr filel file文件file中address表达的内容后插入文件filel的内容 语法格式:sed addressw filel file文件file中address表达的内容写入文件file2中 例如:$ sed /unix/r 11 file在文件file中unix字符的后面读入11文件的内容$ sed 2r 11 file在文件file的第2行后面读入11文件的内容$ sed 2,5w 22 file将文件file中第2行到第5行的内容写到
29、22文件中去。awk181 awk概述awk是一种样式扫描与处理工具,与sed和grep很相似,但其功能却大大强于sed和grep, 它几乎可以完成grep和sed所能完成的全部工作,同时它还可以可以进行样式装入、流控 制、数学运算符、进程控制语句甚至于内置的变量和函数。awk是以三个创立者的名字(Aho、Peter Weinberg和Brain Kernighan)的缩写命名的,awk 拥有自己的语言:awk程序设计语言。awk语言的最基本功能是在文件或字符串中基于指定 规则浏览和抽取信息。awk抽取信息后才能进行其他文本操作。1.82 Awk调用有三种方式可以调用awkawk 命令行:aw
30、k -F field-separator commands inputfile(s)-F域分隔符是可选的,awk使用空格作为缺省的分隔符;commands是真正的awk命令; input-files是一个或多个输入文件。将所有的awk命令插入一个脚本文件并以#!/bin/awk -f作为首行,给予该脚本可执行 权限,然后在shell下通过键入该脚本的脚本名调用之。将所有的awk命令插入一个单独脚本文件,然后使用:awk -f awk-script-file input_file(s)-f选项指明文件awk-script-file中的awk脚本,input-files是一个或多个输入文件。awk
31、命令的一般形式 awk BEGIN actions awk_pattern1 actions awk_patternN actions awk END actions 其中 BEGIN actions 和 END actions 是可选的。awk脚本文件#!/bin/awk -fBEGIN print this is the begin of awk script print $1, $2, $3 END print this is the end of awk script 第一行是!/bin/awk -f。这很重要,没有它自包含脚本将不能执行。这一行告之脚本系统中awk 的位置。通过将命令
32、分开,脚本可读性提高,还可以在命令之间加入注释,使用“#”作为注 释符,它使“#”到行尾的内容成为注释。域和记录awk执行时,其浏览域标记为$1、$2 . . . $n,这种方法称为域标识。使用这些域标识将更容 易对域进行进一步处理。使用$ 1 , $ 3表示参照第1和第3域,注意这里用逗号做域分隔。如 果希望打印一个有5个域的记录的所有域,不必指明$ 1 , $ 2 , $ 3 , $ 4 , $ 5,可使用$ 0,意即 所有域。例子:$ awk -F : print $1, $3, $6 /etc/passwd 打印 passwd 文件的用户名、用户 ID 和用户目录 $ awk 7hon
33、gdy/print /etc/passwd 显示文本文件passwd含有字符串hongdy的所有行。流程控制结构if (condition) then-body else else-bodywhile (condition) bodydo body while (condition)for (initialization; condition; increment) body其中condition 一般为布尔表达式,body和else-body是awk语句块。1.8.3 awk 变量在awk脚本中的表达式中要经常使用变量。不要给变量加双引号,因为awk将视之为字符 串。awk的变量基本可以分为
34、两类:awk内部变量和自动以变量。1.8.31 awk内部变量awk的内部变量用于存储awk运行时的各种参数,这些内部变量又可以分为:(1)自动内部变量:这些变量的值会随着awk程序的运行而动态的变化,在awk_script中 改变这些变量的值是没有意义的(即不应该被赋值)。常用的自动内部变量变量说明NF当前输入字段的字段数NR当前输入文件中已经被awk读取过的记录行的数目FNR已经被awk读取过的记录行的总数目。只有一个输入文件时FNR和NR相等ARGC命令行参数个数FILENAME当前输入文件的文件名ARGIND当前被处理的文件在数组ARGV内的索引例子:$ awk print “file
35、name= FILENAME, “count= NF 11假设文件11 内容为123 abc。Filename=11, count=2(2)字段变量($0 $1 $2 $3 .)当awk把当前输入记录分段时,会对这些字段变量赋值。在awk运行过程中字段变量的值 是动态变化的。可以创建新的输出字段,比如当前输入记录被分割为8个字段,这时可以通 过对变量$9 (或$9之后的字段变量)赋值而增加输出字段,NR的值也将随之变化。字段变量支持变量名替换。例子:$ pwd I awk -F/ print $NF打印输入记录的最后一个字段如果当前目录为/home/hongdy/linux , awd以/为分
36、隔符,有三个字段,输入的最后一个字段 为 linux$ awk x=2;print $x 11打印输入记录的第2个字段如果文件11的内容为zhou xu hong,有三个字段,第二个字段即为xu(3)其它内部变量可以修改这些变量。常见的有:变量说明FS输入记录的字段分隔符(默认是空格和制表符)OFS输出记录的字段分隔符(默认是空格)OFMT 数字的输出格式(默认是.6g)RS输入记录间的分隔符(默认是NEWLINE)ORS输出记录间的分隔符(默认是NEWLINE)ARGV命令行参数数组ENVIRON存储系统当前环境变量值的数组例如:$ cat /etc/passwd I awk BEGIN F
37、S=: print User name: $1,UID: $3文件/etc/passwd 内容类似于 hongdy:x:501:501:hongdy:/home/hongdy:/bin/sh,以:为分隔符, 打印用户名和用户ID。18.3.2自定义变量(1)定义变量varname=value (自定义变量不需声明,赋值语句同时完成变量定义和初始化)(2)表达式中出现不带双引号的字符串都被视为变量,如果未赋值默认值为0或空字符串。1.8.4 Awk 函数可以在awk_script的任何地方使用awk函数。awk函数可以分为内置函数和自定义函数。1.8.41 awk内置函数(1)常见awk内置数值
38、函数函数名说明int(x)求出x的整数部份,朝向0的方向做舍去。eg: int(3.9)是3sqrt(x)求出x正的平方根值。eg: sqrt=2exp(x)求出x的次方。eg: exp(2)即是求e*e。log(x)求出x的自然对数。sin(x)求出x的sine值,x是弪度量。cos(x)求出x的cosine值,x是弪度量。rand ()得到一个随机数(平均分布在0和1之间)。srand(x)设定产生随机数的seed为x。(2)常见awk内置字符串函数函数名说明index(in, find)返回字符串in中字符串find第一次出现的位置(索引从1开始),如果在字串in中找不 到字符串find
39、,则返回值为0。length(s)求出字符串s的字符个数。eg: length(abcde)是5。match(s,r)r在字符串s的第一次出现的位置,如果s不包含r,则返回值0。sprintf(fmt,exp1,.)返回模式字符串:和printf类似印出sub(p, r,t)在字符串t中寻找符合模式字符串p的最靠前最长的位置,并以字符串r代替最前的p。substr(str, st, len)传回str的子字符串,其长度为len字符,从str的第st个位置开始。如果len没有出 现,则传回的子字符串是从第st个位置开始至结束。split(s,a,fs)在分隔符fs为分隔符将字符串s分隔成一个aw
40、k数组a,并返回a的下标数tolower(str)将字符串str的大写字母改为小写字母toupper(str)将字符串string的小写字母改为大写字母例子:$ echo abcdefg I awk print length($0)打印字符串“abcdefg”勺长度(3)常见awk内置系统函数函数名说明close(filename)将输入或输出的文件filename关闭system(command)此函数允许调用操作系统的指令,执行完后将回到awk程序18.4.2自定义函数复杂的awk常常可以使用自己定义的函数来简化。调用自定义的函数与调用内置函数的方 法一样。自定义函数定义的格式:自定义函数
41、可以在awk程序的任何地方定义。function fun_name (parameter_list) / parameter_list 是以逗号分隔的参数列表 body-of-function / 函数体,是 awk 语句块例子:$ awk print sum = SquareSum($l,$2) function SquareSum(x,y) sum=x*x+y*y ; return sum 11自定义了一个平方和的函数,从文件11中取出两个数,打印他们的平方和。或者写到脚本文件里$ vi awk_fun#!/bin/awk -ffunction SquareSum(x, y) sum =
42、x*x + y*y; return sum;print sum=, SquareSum($l, $2)$ chmod a+x awk_fun$ ./awk_fun 11sum=13假设文件11的内容是2 3,平方和是13。18.4.3 Awk输出函数printfawk提供函数printf,拥有几种不同的格式化输出功能,每一种printf函数都以一个符号开 始,以一个决定转换的字符结束。printf函数基本语法是printf(格式控制符,参数)。 例子:$ awk printf(”d %sn, $1, $2) 11123 abc假设文件11的内容是数字123和字符串abc,使用printf打印整
43、型数和字符串。1.9引号符号含义双引号可以引用除字符$、外的任意字符或字符串单引号与双引号类似,不同的是shell会忽略任何引用值反引号设置系统命令的输出到变量,shell将反引号中的内容作为一个系统命令并执行反斜线屏蔽特殊含义 & * + $ “ | ?1.10命令执行顺序在执行某个命令的时候,有时需要依赖于前一个命令是否执行成功。比如:往某个文件夹写 入文件,要先判断那个文件夹是否存在,否则无法写入文件。如果希望在成功地执行一个命令之后再执行另一个命令,或者在一个命令失败后再执行另一 个命令,&和丨丨可以完成这样的功能。相应的命令可以是系统命令或shell脚本。Shell 还提供了在当前s
44、hell或子shell中执行一组命令的方法,即使用()和 。(1)使用&使用&的一般格式:命令1 &命令2 &左边的命令返回真(即返回0,成功被执行)后,&右边的命令才能够被执行。(2)使用|使用II的一般格式: 命令1 II命令2II左边的命令未执行成功,II右边的命令才能够执行。(3)用()和将命令结合在一起为了在shell中执行一组命令,用命令分隔符隔开命令,并把所有的命令用()或括起来。 ()的一般形式:(命令1;命令2;.)的一般形式:命令1;命令2; . . 例子:$ -d test & rmkdir test除这个目录$ -f test II touch test一个文件如果使用
45、例子:$ -d test & rmkdir test除这个目录$ -f test II touch test一个文件/如果当前目录下的test是个目录,则删/如果test不是一个正规文件,则创建1.11控制流结构(1) if语句if then else语句的一般格式:if条件1then命令1elif条件2then命令2else命令3fi使用if语句时,必须将then部分放在新行,否则会产生错误。如果不分行,必须使用命令 分隔符。if 条件;then命令fi例子:vi ifl.sh#!/bin/shecho Please input your name?read NAMEecho Please
46、input your sex?read SEXif $SEX = male ; thenecho Name: $NAME Sex: maleelif $SEX = female ; thenecho Name: $NAME Sex: femaleelseecho Name: $NAME Sex: unkonwnfi程序提示用户输入姓名和性别,然后判断性别并打印结果。(2) case 语句case语句的一般格式:case 值 in模式1命令1模式2命令2esac例子:$ vi case1.sh#!/bin/shecho -n Enter a number from 1 to 3:read NUM
47、case $NUM in1)echo your select 12)echo your select 23)echo your select 3*)echo your select out 1-3esac程序提示用户输入选择,然后打印用户的选择。(3) for循环For循环的一般格式:for变量名in列表do命令1命令2donefor循环不使用in列表选项,接受命令行位置参数作为参数,查看特定参数$或$*,已从 命令行中取得参数for param in $ or for param in $*例子:vi forl.shfor loop in 1 2 3 4 5doecho $loopdone(
48、4) while 循环While循环用于不断执行一系列命令,也用于从文件中读取数据。While循环的一般格式:while命令do命令1命令2done例子:$ vi whilel.sh#!/bin/shCOUNTERSwhile $COUNTER -It 5 doCOUNTER=expr $COUNTER + 1 echo $COUNTERdoneCOUNTER初始化为0,然后每次加1并打印,直到COUNTER小于5。1.12条件测试1.12.1测试文件状态test 一般有两种格式:test condition 或condition 文件状态有:(1)-d目录;(2) -s非空;(3)-f正规文件;(4) -L符号连接;(5) -r可读;(6) -w可写;(7) -x可执行例子:$ Is -1 test.file-rw-r-r-test.file$ test -w test.file或 -w test.file $ echo $?测试时可使用逻辑操作符(1) -a逻辑与:操作符两边均为真,结果为真,否则为假。(2) -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东酒店管理职业技术学院《俄语词汇学》2023-2024学年第一学期期末试卷
- 广东交通职业技术学院《精密机械设计基础》2023-2024学年第一学期期末试卷
- 广东工商职业技术大学《视觉形象识别设计》2023-2024学年第一学期期末试卷
- 《如何对待批评》课件
- 培训课件-车辆消防安全知识培训
- 《新药研发概论》课件
- 广安职业技术学院《专业韩语1》2023-2024学年第一学期期末试卷
- 共青科技职业学院《人文采风》2023-2024学年第一学期期末试卷
- 《素材卡通图》课件
- 《性格分析与沟通》课件
- 2023年历届华杯赛初赛小高真题
- 网络安全培训-网络安全培训课件
- 焦作市中佰宜佳材料有限公司年产15万吨煅后焦项目环评报告
- GB/T 6913-2023锅炉用水和冷却水分析方法磷酸盐的测定
- 项目部布置图方案
- 珠海某啤酒厂拆除工程施工方案
- 《文明城市建设问题研究开题报告3000字》
- JJF 1357-2012湿式气体流量计校准规范
- 人教PEP版三年级上册英语 Unit 2 教案 课时一
- GB/T 17554.1-2006识别卡测试方法第1部分:一般特性测试
- 玲龙医用诊断X 射线系统 XR 6000维修手册
评论
0/150
提交评论