Linuxshell编程基础•AdvancedBash-ScriptingGuide高级Bash脚本编程指南LINUX与UNIXSHELL编程指南的类别Shell类型主要特点简称命令提示符BourneShell最老、使用最广泛,每个UNIX都提供,是三种Shell程序的基础。BShellsh$KornShell是对BShell的扩充,兼容BShell。KShellksh$C-Shell更接近于C语言,提供比BShell更强大的功能,是三种Shell程序中功能最强大的。CShellcsh%Bash:Bourne-AgainShellShell的发展与分类BshKshBashCshBsh在20世纪70年代中期诞生于新泽西的AT&T贝尔实验室,具有较强的脚本编程功能Csh在20世纪80年代早期诞生于加利福尼亚大学,使用C语言的语法,用户命令交互更加方便Ksh结合了Bsh和Csh两者的功能优势,兼有Bsh的语法和Csh的交互特性Bash是Bsh的升级替代品,吸收了Ksh中的诸多优秀特性,Bash是开源软件内容Linux基本命令Shell的语法结构Linuxshell基本介绍shell基本命令$clear清除屏幕命令shell基本命令$mancommand系统帮助shell基本命令echo:回显格式:echo[OPTION]...[STRING]...echo命令[oracle@src~]$echohelloworld!helloworld![oracle@src~]$a=mynameisleeecho[oracle@src~]$echo$amynameisleeecho[oracle@src~]$echo$ORACLE_SIDDBTESTshell基本命令pwd:显示当前目录格式:pwd[OPTION]pwd命令[oracle@srcftp]$pwd/home/oracle/ftp[oracle@srcftp]$cd/etc[oracle@srcetc]$pwd/etc[oracle@srcetc]$shell基本命令cd:改变目录格式:cd[directoryname]...cd命令[oracle@src~]$pwd/home/oracle[oracle@src~]$cd..[oracle@srchome]$pwd/home[oracle@srchome]$cd/[oracle@src/]$pwd/shell基本命令ls:列表目录内容格式:ls[OPTION]...[FILE]...OPTION:-l:显示文件所有属性-a:显示所有文件含隐含文件ls命令shell基本命令cat:连接文件并显示文件内容格式:cat[OPTION][FILE]...cat命令[oracle@src~]$catmytest.txtthisistest!shell基本命令wc:打印一个文件的字节数,字数和行数格式:wc[OPTION]...[FILE]...OPTION:-l:文件包含的行数-w:文件包含的单词数-c:文件包含的字符数wc命令shell基本命令head:显示文件开始的部分格式:head[OPTION]...[FILE]...OPTION:-n:显示的行数head命令默认显示前10行shell基本命令tail:显示文件后面的部分格式:tail[OPTION]...[FILE]...OPTION:-n:显示的行数tail命令默认显示后10行shell基本命令mkdir:创建文件目录格式:mkdir[OPTION]DIRECTORY...mkdir命令[oracle@srcleeecho]$pwd/home/oracle/leeecho[oracle@srcleeecho]$mkdirtest[oracle@srcleeecho]$lstestshell基本命令rmdir:删除文件目录格式:rmdir[OPTION]DIRECTORY...rmdir命令•文件夹必须为空才可以使用rmdir删除shell基本命令rm:删除文件格式:rmdir[OPTION]DIRECTORY...OPTION:-r:删除文件夹以及所包含的文件rm命令•rm是危险的,谨慎使用!shell基本命令date:显示或设置日期格式:date[OPTION]...[+FORMAT]date命令•取昨天的时间•echo`date+%Y%m%d-d'yesterday'`•取三天前的时间•echo`date+%Y%m%d-d‘3daysago'`•echo`date+%Y%m%d-d‘-3days'`•取明天的时间•echo`date+%Y%m%d-d'tomorrow'`•echo`date+%Y%m%d-d‘+1days'`shell基本命令find:查找文件格式:find[path...][expression]find命令•find/home/oracle/-name*.txt-printshell基本命令xargs:执行命令格式:xargs[expression]xargs命令•find/home/oracle/-name*.txt-print|xargscat•解决命令参数过多的问题shell基本命令grep:搜索符合要求的内容格式:grep[options]PATTERN[FILE...]OPTION:-v:找出不匹配的行-c:统计匹配行数-n:显示匹配行及其行号grep命令命令显示grep‘[A-Z]’listlist中包含一个大写字母的行grep‘[0-9]’datadata中包含数据的行grep‘[A-Z]…[0-9]’listlist中包含大写字母开始,数据结尾的5个字符组合的行grep‘\.pic$’listlist中以.pic结尾的行shell基本命令crontab:执行作业格式:crontab[-uuser][-l|-r|-e]OPTION:-l:显示cron文件-e:创建、编辑cron文件-r:删除cron文件crontab命令Crontab文件格式:minhourdatemonthdaycommand0-590-231-311-120-6shell基本命令•把两个命令连接起来,使前面命令的输出是后面一个命令的输入,这就是管道。管道(|)•显示oracle的后台进程ps-ef|grep$ORACLE_SID实际例gunzip-cE:\20060621\20060621\*.gz|grep-i^[J]...[SMS]E:\20060621\test7.txtgunzip-cE:\20060621\20060621\*.gz|grep-iJ...SMS*E:\20060621\test7.txt子shell基本命令输入输出重定向•echothisistest1/home/oracle/leeecho/text1.txt•echothisistest3/home/oracle/leeecho/text1.txt•grep[A-C]file1.txt符号重定向功能输出重定向追加输出|管道操作输入重定向shell基本命令引用•单引号忽略所有的特殊字符,单引号自己除外,变量不解释echo'|;()[]{}\\`$ORACLE_SID‘•双引号echo|;()[]{}\\$ORACLE_SID•单引号(‘)忽略所有除自己之外的特殊字符•双引号(“)不忽略一下三种特殊字符美元符号$反引号`反斜杠\•反斜杠(\)忽略后面跟着的一个特殊字符shell基本命令有趣的例子:[oracle@srcleeecho]$x=*[oracle@srcleeecho]$echo$xtest1.txttest2.txt[oracle@srcleeecho]$echo$x*[oracle@srcleeecho]$echo'$x'$x[oracle@srcleeecho]$echo\$x$xshell基本命令命令替换•echoYesterdayis`date+%Y%m%d-d'yesterday'`!•echoYesterdayis$(date+%Y%m%d-d'yesterday')!•反引号(`)•$(…)结构Bash的命令行编辑功能操作键功能左右方向键使用左右方向键可以使光标在当前命令行中的已有字符间进行任意的移动退格键删除命令行中光标左边的字符Del删除当前光标处的字符Home将光标快速移动到命令行的行首End将光标快速移动到命令行的行尾Ctrl+u删除当前光标到行首的内容Ctrl+k删除当前光标到行尾的内容Bash的命令行补全功能命令补全功能使用Tab键可在命令查找路径中查找匹配的命令,并进行命令拼写的补全文件补全功能使用Tab键可对文件和目录名进行补全Bash的命令历史与命令重复命令历史功能的使用使用上下方向键浏览已输入命令(历史命令)历史命令的查看$history用户命令历史保存文件~/.bash_history命令历史的清除$history-cBash的命令别名功能命令别名的显示$alias命令别名的定义$aliasgrep='grep-i'命令别名的取消$aliasgrep$unalias-a系统别名定义文件RHEL4系统中为用户预定义的命令别名保存在“/etc/profile.d/”目录的配置文件中管道与重定向标准输入输出重定向操作管道操作标准输入输出输入输出文件文件编号默认设备标准输入0键盘标准输出1显示器标准错误输出2显示器重定向操作类别操作符说明输入重定向输入重定向是将命令中接收输入的途径由默认的键盘更改(重定向)为指定的文件输出重定向将命令的执行结果重定向输出到指定的文件中,命令进行输出重定向后执行结果将不显示在屏幕上将命令执行的结果重定向并追加到指定文件的末尾保存错误重定向2清空指定文件的内容,并保存标准错误输出的内容到指定文件中2向指定文件中追加命令的错误输出,而不覆盖文件中的原有内容输出与错误组合重定向&将标准输出与错误输出的内容全部重定向到指定文件内容Linux基本命令Shell的语法结构Linuxshell基本介绍知识准备命令行编辑功能命令和文件名补全功能命令历史功能命令别名功能提供作业控制功能具有将命令序列定义为功能键的功能灵活的Shell脚本编程Shell变量的分类环境变量预定义变量位置变量用户自定义变量(本地变量)环境变量使用set命令查看环境变量set常用环境变量USERUIDSHELLHOMEPWDPATHPS1PS2环境变量配置文件/etc/bashrc/etc/profile~/.bash_profile~/.bashrc位置变量$./exam01onetwotreefourfivesix$0表示命令名称$0属于预定义变量$0不属于位置变量$1表示第1个命令参数$2表示第2个命令参数$3表示第3个命令参数$n表示第n个命令参数预定义变量变量名含义$#表示位置参数的数量$*表示所有位置参数的内容$?表示命令执行后返回的状态,用于检查上一个命令的执行是否正确;在Linux中,命令退出状态为0表示命令正确执行,任何非0值表示命令执行错误$$表示当前进程的进程号$!表示后台运行的最后一个进程号$0表示当前执行的进程名用户自定义变量自定义变量的设置$DAY=sunday自定义变量的查看与引用$echo$DAY自定义变量的输出$exportDAY自定义变量的清除$unsetDAYshell语法结构变量•Shell的变量没