您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Shell及其初级编程
1Shell概述第8讲Shell及其编程2shell脚本3shell脚本变量1Shell概述shell就是可以接受用户输入命令的程序。shell隐藏了操作系统低层的细节。Unix下的图形用户界面Gnome和KDE,有时也被叫做“虚拟shell”或“图形shell”。Linux操作系统下的shell既是用户交互界面,也是控制系统的脚本语言。在Linux系列操作系统下,shell是控制系统启动、XWindow启动、和很多其他实用工具的脚本解释程序。1.1BourneShell第一个标准LinuxShell是1970年底在V7Unix(AT&T第7版)中引入,以其资助者StephenBourne的名字命名。Bourneshell是一个交换式的命令解释器和命令编程语言,可以运行为loginshell或者loginshell的子shell只有login命令可以调用Bourneshell作为一个loginshell。此时,shell先读取/etc/profile文件和$HOME/.profile文件/etc/profile文件为所有用户定制环境,$HOME/.profile文件为本用户定制环境。shell读取用户输入。1.2CShellCShell是BillJoy在上世纪80年代早期,在Berkeley的加利福尼亚大学开发的。目的是让用户更容易的使用交互式功能,并把ALGOL风格,适于数值计算的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能1.3KornShell在很长一段时间里,只有两类shell供选择,Bourneshell用来编程,Cshell用来交互AT&T贝尔实验室的DavidKorn开发了Kornshell。ksh结合了所有的Cshell的交互式特性,并融入了Bourneshell的语法。新增了数学计算,进程协作(coprocess)、行内编辑(inlineediting)等功能。KornShell是一个交互式的命令解释器和命令编程语言。它符合POSIX标准1.4BourneAgainShellBourneAgainShell,简称bash,1987年由布莱恩·福克斯开发的。也是GNU计划的一部分,用来替代Bourneshell。bash是大多数类Unix系统以及MacOSXv10.4默认的shell,被移植到多种系统中bash的语法针对Bourneshell的不足做了很多扩展。bash的命令语法很多来自Kornshell和Cshell作为一个交互式的shell,按下TAB键即可自动补全已部分输入的程序名,文件名,变量名等等1.5查看用户shell使用命令cat/etc/shells来查看/bin/目录下Ubuntu支持的Shellecho$SHELL命令查看当前用户的shell其他用户的shell,可以在/etc/passwd文件中看到回目录2shell脚本shell脚本是利用shell的功能所写的一个纯文本程序,将各类shell命令预先放入到一个文件中,方便一次性执行的一个程序文件,方便管理员进行设置或者管理。shell脚本与Windows下的批处理相似,一个操作执行多个命令shellscript提供了数组、循环、条件以及逻辑判断等功能,可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法2.2执行shell脚本1.Shell脚本执行过程shell按照脚本中命令的出现的顺序,从上而下、从左而右地分析与执行,可以用“&”把一个脚本的执行放入后台,但是当脚本运行到最后是不会等待这个进程的返回结果,解决方法是在脚本最后放“wait”任何加在#后面的数据将全部被视为批注文字而被忽略2.2执行shell脚本2.Shell脚本执行方式直接命令执行sh/bash[选项]脚本名source脚本名2.2执行shell脚本2.Shell脚本执行方式直接命令执行sh/bash[选项]脚本名打开一个子shell读取并执行脚本中命令。该脚本文件可以没有“执行权限”。sh或bash在执行脚本过程中,选项如下:-n:不要执行script,仅检查语法的问题-v:在执行script前,先将script的内容输出到屏幕上-x:进入跟踪方式,显示所执行的每一条命令,并且在行首显示一个“+”号2.2执行shell脚本2.Shell脚本执行方式直接命令执行sh/bash[选项]脚本名source脚本名在当前bash环境下读取并执行脚本中命令该脚本文件可以没有“执行权限”通常用命令“.”来替代回目录3shell脚本变量shell脚本变量就是在shell脚本程序中保存,系统和用户所需要的各种各样的值。shell脚本变量可以分为:环境变量系统变量用户自定义变量3.1系统变量Shell常用的系统变量并不多,在做一些参数检测的时候十分有用按键命令$#命令行参数的个数$n当前程序的第n个参数,n=1,2,...9$0当前程序的名称$?执行上一个指令或函数的返回值$*以“参数1参数2...”形式保存所有参数$@以“参数1”“参数2”...形式保存所有参数$$本程序的(进程ID号)PID$!上一个命令的PID$-显示shell使用的当前选项,与set命令功能相同3.1系统变量例:分析名为sysvar.sh脚本的运行结果。sysvar.sh脚本的代码如下:#!/bin/sh#toexplaintheapplicationofsystemvariables.echo\$1=$1;\$2=$2;echothenumberofparameteris$#;echothereturncodeoflastcommandis$?;echothescriptnameis$0;echotheparametersare$*;echotheparametersare$@;运行结果#!/bin/sh#toexplaintheapplicationofsystemvariables.echo\$1=$1;\$2=$2;echothenumberofparameteris$#;echothereturncodeoflastcommandis$?;echothescriptnameis$0;echotheparametersare$*;echotheparametersare$@;3.2环境变量登入系统就获得一个shell﹐它占据一个进程,输入的命令都属于这个shell进程的子进程,选择此shell后,获得一些环境设定,即环境变量。环境变量约束用户行为,也帮助实现很多功能,包括主目录的变换、自定义显示符的提示方法、设定执行文件查找的路径等。常用的环境变量按键命令PATH命令搜索路径,以冒号为分隔符.但当前目录不在系统路径里HOME用户home目录的路径名,是cd命令的默认参数COLUMNS定义了命令编辑模式下可使用命令行的长度EDITOR默认的行编辑器VISUAL默认的可视编辑器FCEDIT命令fc使用的编辑器HISTFILE命令历史文件HISTSIZE命令历史文件中最多可包含的命令条数常用的环境变量按键命令HISTFILESI命令历史文件中包含的最大行数IFS定义shell使用的分隔符LOGNAME用户登录名MAIL指向一个需要shell监视修改时间的文件.当该文件修改后,shell发送消息Youhavamail给用户MAILCHECKSHELL检查MAIL文件的周期,单位是秒MAILPATH功能与MAIL类似.但可以用一组文件,以冒号分隔,每个文件后可跟一个问号和一条发向用户的消息SHELLSHELL的路径名TERM终端类型常用的环境变量按键命令TMOUTSHELL自动退出的时间,单位为秒,0为禁止SHELL自动退出PROMPT_COMMAND指定在主命令提示符前应执行的命令PS1主命令提示符PS2二级命令提示符,命令执行过程中要求输入数据时用PS3select的命令提示符PS4调试命令提示符MANPATH寻找手册页的路径,以冒号分隔LD_LIBRARY_PATH寻找库的路径,以冒号分隔3.2环境变量例:使用env命令查看环境变量,并分析。为了方便查看,使用重定向命令将环境变量存储到enviroment文件中,命令:envenviroment,然后使用编辑器打开该文件3.2环境变量3.3用户自定义变量例:哪些变量名是合法的desk&123456abcdesk123_abc1_123Add_99用户定义的变量由字母、数字及下划线组成,变量名第一个字符不能为数字,变量名是大小写敏感的。shell中的变量与c语言中的变量完全不同,不用声明即可使用,给变量赋值的同时也就声明了变量3.4变量的使用引用变量时在变量名前面加上$符号输出变量时用echo如果变量恰巧包含在其他字符串中,为了区分变量和其他字符串,需要用{}将变量名括起来1.变量值的引用与输出3.4变量的使用变量赋值的方式:变量名=值2.变量的赋值和替换例:day=mondaystring=welcome!注意:给变量赋值的时候,不能在“=”两边留空格3.4变量的使用重置就相当于赋给这个变量另外一个值清空某一变量的值可以使用unset命令2.变量的赋值和替换变量可以有条件的替换,替换条件放在一对大括号{}中${variable:-value}3.4变量的使用2.变量的赋值和替换第二种替换:变量为空时替换,而且变量的值会发生改变${variable:=value}3.4变量的使用2.变量的赋值和替换第三种替换:只有当变量已赋值时才用指定值替换${variable:+value}3.5数字与数组的声明和使用1.数字与数组的声明shell中默认的赋值是对字符串赋值对数字或数组进行声明,则要使用到declare命令3.5数字与数组的声明和使用1.数字与数组的声明declare命令的格式:declare[+/-][选项]variable+/-:指定或关闭变量的属性a:定义后面名为variable的变量为数组(array)类型i:定义后面名为variable的变量为整数数字(integer)类型x:将后面的variable变成环境变量r:将变量设置成readonly类型f:将后面的variable定义为函数3.5数字与数组的声明和使用2.数组的使用数组下标cong0开始,范围没有限制,不必使用连续分量name=(value1...valuen)//此时下标从0开始name[index]=value//index为下标,从0开始例:对数组进行声明并赋值declare-aname=(abcdef)//此时数组下标从0开始name[0]=A//将第一个元素a修改为Aname[9]=j//将第10个元素赋值为j3.5数字与数组的声明和使用2.数组的使用取数组中的元素的时候,语法形式如下:echo${array[index]}如果想要取数组的全部元素,则要使用:echo${array[@]}3.6shell的输入/输出1.echo输出命令使用echo可以输出文本或变量到标准输出,或者把字符串输入到文件中,它的一般形式为:echo[选项]字符串选项:-n:输出后不自动换行-e:启用“\”字符的转换。3.6shell的输入/输出-e:启用“\”字符的转换\a发出警告声\b删除前一个字符\c最后不加上换行符号\f换行但光标仍旧停留在原来的位置\n换行且光标移至行首\r光标移至行首,但不换行\t插入tab\v与\f相同\\插入\字符\x插入十六进制数所代表的ASCII字符3.6shell的输入/输出1.echo输出命令例:不换行输出字符“helloworld!”例:\t和\n的应用例:\x的应用3.6shell的输入/输出2.read输入命令使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量,如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直到遇到第一个文件结束符或回车,一
本文标题:Shell及其初级编程
链接地址:https://www.777doc.com/doc-2858375 .html