第 4 章 Shell命令语言_第1页
第 4 章 Shell命令语言_第2页
第 4 章 Shell命令语言_第3页
第 4 章 Shell命令语言_第4页
第 4 章 Shell命令语言_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章Shell命令语言内容提要shell概述shell脚本shell命令的组成shell变量shell控制语句函数4.1shell概述shell概述shell是一种用户交互程序,位于用户与内核之间,它不断接收并执行用户提交的作业,将执行结果返回给用户。shell引入了变量、控制语句和函数等语法,具有结构化程序设计语言的特征。与C/C++等程序设计语言不同,shell命令语言属于解释性语言。shell的分类shell源自Unix,自Unix诞生至今,诞生了多个shell版本,其中较为著名的有BourneshellCshellKornshellGNUBourne-AgainshellBash作为Linux发行版默认的shell。4.2shell脚本内容提要shell脚本概述shell脚本的执行过程命令的运行环境脚本的执行方法shell脚本用shell命令语言编写的文本文件通常称为shell脚本,脚本后缀名通常以.sh标识。一个简单Shell脚本demo.sh#!/bin/bash#demoscriptvar1="welcometouseShellscript"echo$var1pwdshell脚本的执行过程取shell脚本第1条命令语法检查内部命令调用shell内部函数取下一条命令脚本结束结束合法是外部命令是在shell创建的子进程中加载对应的程序不合法否命令的运行环境shell脚本可运行在两种不同的环境中,当前shell和子shell。1.当前shell环境当前Shell环境中的变量对命令可见,命令可直接修改变量的内容。2.子shell环境子Shell拥有独立的命名空间,子Shell会生成父Shell的变量副本,命令对副本的修改,对父Shell不产生影响。脚本的执行方法1.添加可执行权脚本运行于子shell环境。2.使用bash命令执行将脚本作为参数交由shell交互程序执行,脚本运行于子shell环境。3.利用元字符.执行脚本在执行的脚本前加上字符.和空格,脚本运行于当前shell环境。实例分析$var1=123$catdemo.sh#!/bin/bashechohello$USER$var1$chmod+xdemo.sh$./demo.sh//在子shell环境下运行

helloroot$bashdemo.sh//在子shell环境下运行

helloroot$.demo.sh//在当前shell环境下运行

helloroot1234.3shell命令的组成内容提要简单命令管道命令序列复合命令简单命令语法[!]cmd[list]功能cmd为命令名,list为参数列表,参数包括选项、重定向和操作对象,参数数量因命令而异。命令的返回值取决于命令中执行exit系统调用时传递的状态,若命令因信号而结束,其返回值为128+n。管道语法cmd1|cmd2功能命令cmd1的标准输出作为命令cmd2的标准输入。管道的返回状态取决于命令cmd2,命令cmd1和cmd2军在子shell环境中执行。命令序列语法cmd1[;|&|&&||||<newline>]cmd2功能命令cmd1和cmd2取决于操作符,操作符的含义如下表所示。操作符含义cmd1;cmd2以独立的进程依次运行cmd1和cmd2cmd1&cmd2cmd1和cmd2同时运行,分属于不同进程组cmd1&&cmd2当cmd1执行为真时,执行cmd2cmd1||cmd2当cmd1执行为假时,执行cmd2命令序列的返回值取决于最后一个执行的命令。。复合命令1.(list)命令序列list在子shell环境中运行。2.{list;}命令序列list在当前shell环境下运行,命令序列需以回车换行符或分号结尾。复合命令(续)3.((expr))用于数值计算,算术表达式expr在当前shell环境下运行,语法可参见C语言。当expr的值为0,返回状态为0,否则返回1。4.[[expr]]用于测试条件表达式expr的真假,它是[]和test的扩展,在当前shell环境下运行。5.控制语句用于控制脚本的执行逻辑。实力分析(1)在子Shell环境中执行赋值语句$var1=12;(var1=23;echo-n$var1);echo$var12312(2)在当前Shell环境中执行赋值语句$var1=12;{var1=23;echo-n$var1;};echo$var123234.4shell变量内容提要shell变量概述变量的分类输入和输出参数的引用shell变量概述变量是构成语言的基础,用于存储各种参数。shell变量有其自身特点。1.shell变量不预先声明类型。2.shell变量无局部变量和全局变量之分。shell变量的分类用户自定义变量环境变量位置变量预定义变量用户自定义变量(1)用户自定义变量的赋值语法name=value(2)变量的引用语法name2=${name1}name2=$name1(3)清除变量的内容语法unsetname环境变量环境变量用于记录shell的环境参数,例如,用户身份和工作环境等设置环境变量语法export[option][name|name[=value]...实例分析$exportvar1="helloLinux"$(echo$var1)helloLinuxshell中常见的环境变量环境变量名含义HOME当前用户的主目录PATH命令搜索路径LOGNAME用户登录名PS1第一命令提示符PS2第二命令提示符,默认是>PWD用户的当前目录UID当前用户标识符登录shell启动时,系统会为用户预先设置一些环境变量。位置变量未知变量用于标识传递给脚本或函数参数的位置。位置变量含义0,1,2...数字代表参数的位置,$1代表第1个参数的值,依此类推实例分析$catdemo.sh#!/bin/bashecho$0 $1 $2$bashdemo.shhellolinuxdemo.sh helli inux预定义变量

预定义变量为shell内部预先定义,其内容具有特定的含义。预定义变量含义#位置参数的数量*所有未知参数的内容,以$1$2...$n的形式输出?最近最后一条命令的返回状态$当前进程的进程号!后台运行的最后一个进程号@所有未知参数的内容,以$1$2...$n的形式输出0shell或shell脚本的名称实力分析实例分析$catdemo.sh#!/bin/bashecho$#echo$*$bashdemo.shhellolinux2 hellolinux命令置换将命令的执行结果取代命令本身称为命令置换。语法name=`cmd`name=$(cmd)实例分析$var1=`pwd`$echo$var1/home/zhangs$var2=$(expr$var2+1)输入和输出read/echo语法read[option]list功能从键盘上读取列表list中的变量选项含义-pprompt设置提示信息-nnum当read读num个字符后返回-s键盘输入屏幕不回显,可用于密码输入-ttimeout设置超时时间为timeout-r取消转义字符的转义作用-ddelim定义新的换行符输入和输出read/echo语法echo[option][list]功能显示列表list中的字符串选项含义-n不在最后自动换行-e启用转义符-E禁用转义符,缺省选项转义符含义\a从系统喇叭发送出声音\b向左刪除\c取消行末的换行符号\EESCAPE键\f换页字符\n换行字符\r回车键\t表格跳位键\\反斜线本身字符串引用1.反斜杠在元字符前加上反斜杠\表示转义,改变原字符的含义,但回车换行符例外。2.单引号shell对单引号内的字符不做解释,保留字符的缘由含义。3.双引号

shell除了对双引号内的变量引用和命令置换做出解释外,其他字符保留其原有含义。实例分析$echohello$var1$echo'hello$var1'$echo"hello$var1"$echo*$echo'*'"*"4.5结构化命令内容提要条件表达式文件表达式字符串表达式数学表达式逻辑表达式选择语句if语句case语句循环语句for循环语句while语句条件表达式条件表达式用于判定条件的真假,它是构成选择语句和循环语句的基础。语法test[!]expr[[!]expr][[[!]expr]]功能测试条件表达式expr是否为真,若真则返回0,否则返回1。文件状态操作符操作符含义-dfilename若文件filename为目录文件,则返回真-ffilename若文件filename为普通文件,则返回真-rfilename若文件filename可读,则返回真-sfilename若文件filename的长度大于0,则返回真-ufilename若文件filename的SUID位被设置,则返回真-wfilename若文件filename可写,则返回真-xfilename若文件filename可执行,则返回真用于测试文件的状态实例分析$test-dfilename$echo$?字符串操作符

用于判断两个字符串基于字典序的大小关系,也可测试字符串的内容是否为空。操作符含义string若字符串string非空,则返回真-nstring若字符串string长度大于0,则返回真-zstring若字符串string长度为0,则为返回真string1=string2若字符串string1和string2相等,则返回真string1!=string2若字符串string1和string2不等,则返回真实例分析$test"abc"="abd"$echo$?数字操作符

用于判定两个数字之间的大小关系。操作符含义n1–eqn2判断数字n1与n2是否相等,若相等返回0,否则返回1n1–nen2判断数字n1与n2是否不等,若不等返回0,否则返回1n1–ltn2判断数字n1是否小于n2,若是返回0,否则返回1n1–gtn2判断数字n1是否大于n2,若是返回0,否则返回1n1–len2判断数字n1是否小于或等于n2,若是返回0,否则返回1n1–gen2判断数字n1是否大于或等于n2,若是返回0,否则返回1实例分析$test10-gt20$echo$?逻辑操作符用于判定两个条件表达式的逻辑关系。操作符含义e1–ae2逻辑表达式e1和e2同时为真时,返回0,否则,返回1e1–oe2逻辑表达式e1和e2有一个为真时,返回0,否则,返回1!e1若逻辑表达式e1不为真时,返回0,否则,返回1实例分析$test$var1-gt5-a$var1-lt20$echo$?if语句语法一iflist1thenlist2elselist3fi语法二iflist1then list2fiif语句语法形式三

iflist1 then list2 eliflist3 then list4 else list5 fi命令序列list5属于第2个条件语句的一部分。在实际应用中,一般嵌套层数不能超过二层,否则会影响脚本的可读性。实例分析#!/bin/bashif((${#}!=2))then echo"Usage:${0}num1num2" exit1fi if((${1}>${2}))then echo"${1}isgreaterthan${2}" exit0fiif((${1}<${2}))then echo"${1}islessthan${2}" exit0fiecho"${1}isequalto${2}"case语句语法casenamein[(]pattern1) list1 ;;[(]pattern2) list2 ;;...[(]patternn) listn ;;esac功能根据变量name的值执行匹配的命令序列,list1,list2...listn为命令序列。实例分析#!/bin/bashhour=$(date+%H)case${hour}in(0[5-9]|1[01]) echo"Goodmorining";;(1[2-7]) echo"Goodafternoon";;(*) echo"Goodevening";;esacfor语句语法一

fornameinwords do list done功能将参数列表words中的参数依次赋给变量name,循环执行命令序列list。语法二

for((expr1;expr2;expr3)) do list done功能

expr1,expr2和expr3为算术表达式,语义与C语言的for语句相同。实例分析#!/bin/bash#exam4-6.shif((${#}<1))then echo"Usage:$0num1num..." exit1fi smallest=${1}foriin${*}do if((i<smallest)) then smallest=${i} fidoneecho"thesmallestnumberis:${smallest}"while语句

语法

whilelist1 do list2 done功能循环执行命令序列list2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论