第六章shell脚本_第1页
第六章shell脚本_第2页
第六章shell脚本_第3页
第六章shell脚本_第4页
第六章shell脚本_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、第六章第六章 shell脚本脚本主要内容主要内容 shell概述 shell脚本实例 shell语法6.1 shell概述概述shell的两层含义:既是一种应用程序,又是一种程序设计语言。1.作为应用程序:交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能2.作为程序设计语言:它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。 完成类似于windows下批处理操作,简化我们对系统的管理与应用程序的部署6.1.1 shell应用程序应用程序作为应用程序称之为shell命令解析器 shell是用户和Linux内核之间的接口程序。 用

2、户在提示符下输入的命令都由shell先解释然后传给Linux核心。 它调用了系统核心的大部分功能来执行程序、并以并行的方式协调各个程序的运行Linux系统中提供了好几种不同的shell命令解释器,如sh、ash、bash等。一般默认使用bash作为默认的解释器我们后面编写的shell脚本,都是由上述shell命令解释器解释执行的。6.1.2 shell程序设计语言程序设计语言shell脚本我们学过的c/c+等语言,属于编译性语言(编写完成后需要使用编译器完成编译、汇编、链接等过程变为二进制代码方可执行)shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权

3、限,即可在安装shell命令解释器的环境下执行。shell脚本主要用于:帮助开发人员或系统管理员将复杂而又反复的操作放在一个文件中,通过简单的一步执行操作完成相应任务,从而解放他们的负担。我们来写一个简单的shell程序6.2 shell脚本实例脚本实例一个简单的一个简单的shell程序程序$vi example.sh#!/bin/sh#This is to show what a example lools like.echo “Our first example”echo #this inserts an empty line in outputecho “we are currently

4、 in the following directory.”/bin/pwdechoecho “this directory contains the following files”/bin/ls一个简单的一个简单的shell程序的解析程序的解析shell结构:结构:1.#!指定执行脚本的shell版本2.#注释行3.命令和控制结构创建创建shell程序的步骤:程序的步骤:第一步:创建一个保护命令和控制结构的文件第二部:修改这个文件的权限使它可以执行 使用chmod u+x第三步:执行 ./example 也可以使用 sh example 执行运行运行shell脚本脚本 程序写完后,输入以下命

5、令: chmod u+x example.sh ./example.sh执行即可运行结果如下:运行结果如下:shell脚本分类脚本分类系统进行调用 这类脚本无需用户调用,系统会在合适的时候调用,如:/etc/profile、/.bashrc等用户编写,需要手动调用的 例如我们上面编写的脚本都属于此类无论是系统调用的还是需要我们自己调用的,其语法规则都一样系统启动的脚本系统启动的脚本系统进行调用的shell脚本/etc/profile 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置 开始自启动的程序,一般也在这里设置/.bashrc 用户自己的

6、家目录中的.bashrc 登录时会自动调用,打开任意终端时也会自动调用 这个文件一般设置与个人用户有关的环境变量,如交叉编译器的路径等等6.3 shell语法语法6.3 shell语法语法 shell脚本的定义与执行 变量 条件测试语句 控制语句 函数6.3.1 shell脚本的定义与执行脚本的定义与执行1、定义以开头:#!/bin/sh #!用来声明脚本由什么shell解释,否则使用默认shell2、单个#号代表注释当前行3、执行:#chmod +x test.sh ./test.sh 增加可执行权限后执行#bash test.sh 直接指定使用bash解释test.sh#. test.sh

7、(source test.sh) 使用当前shell读取解释test.sh6.3.2 定义变量定义变量1.自定义变量定义变量变量名=变量值如:num=102. 引用变量$变量名如:i=$num 把变量num的值赋给变量i3.显示变量使用echo命令可以显示单个变量取值echo $num4.清除变量使用unset命令清除变量unset varname6.3.2 定义变量定义变量变量的其它用法:read string从键盘输入一个字符串付给变量string,若string没定义则先定义后使用readonly var=100定义一个只读变量,只能在定义时初始化,以后不能改变,不能被清除。export

8、 var=300使用export说明的变量,会被导出为环境变量,其它shell均可使用注意:此时必须使用source 2_var.sh才可以生效6.3.2 定义变量定义变量注意事项:1、变量名只能英文字母数字下划线,不能以数字开头1_num=10 错误num_1=20 正确2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来;双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符。name=aa bb /错误name=aa bb/正确echo $name is me/输出:aa bb is meecho $name is me/输出

9、:$name is me例例2:2_var.sh环境变量环境变量环境变量:shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,我们在shell中可以直接使用$name引用。定义:一般在/.bashrc或/etc/profile文件中(系统自动调用的脚本)使用export设置,允许用户后来更改VARNAME = value ;export =VARNAME传统上,所有环境变量均为大写显示环境变量使用env 命令可以查看所有的环境变量。清除环境变量使用unset 命令清除环境变量常见的环境变量常见的环境变量常见环境变量:HOME:用于保存注册目录的完全路径名。PATH:用于保存用冒号

10、分隔的目录路径名,shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。PATH=$HOME/bin:/bin:/usr/bin;export PATH HOSTNAME:主机名SHELL:默认的shell命令解析器LOGNAME:此变量保存登录名PWD:当前工作目录的绝对路径名.echo &PATH /直接查看PATH环境变量引用环境变量例引用环境变量例3:3_export.sh预定义变量预定义变量预定义变量:$#:传给shell脚本参数的数量$*:传给shell脚本参数的内容$1、$2、$3、.、$9:运行脚本时传递给其的参数,用空格隔开$?:

11、命令执行后返回的状态$?用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。$0:当前执行的进程名$:当前进程的进程号$变量最常见的用途是用作临时文件的名字以保证临时文件不会重复预定义变量例预定义变量例4:4_$.sh脚本变量的特殊用法脚本变量的特殊用法脚本变量的特殊用法: () (双引号):包含的变量会被解释(单引号):包含的变量会当做字符串解释(数字键1左面的反引号):反引号中的内容作为系统命令,并执行其内容,可以替换输出为一个变量$ echo today is date today is 2012年07月29日星期日12:55:2

12、1 CST转义字符:同c语言n t r a等echo命令需加-e转义(命令序列):由子shell来完成,不影响当前shell中的变量命令序列:在当前shell中执行,会影响当前变量脚本变量例脚本变量例5:5_var_spe.sh 注意:注意: 前后有空格前后有空格6.3.3 条件测试条件测试在写shell脚本时,经常遇到的问题就是判断字符串是否相等,可能还要检查文件状态或进行数字测试,只有这些测试完成才能做下一步动作。test命令:用于测试字符串、文件状态和数字test命令有两种格式: test condition 或 condition 使用方括号时,要注意在条件两边加上空格shell脚本中

13、的条件测试如下: 文件测试、字符串测试、数字测试、复合测试测试语句一般与后面讲的条件语句联合使用条件测试条件测试文件测试文件测试文件测试:测试文件状态的条件表达式 -e 是否存在-d 是目录-f 是文件 -r 可读-w 可写-x 可执行 -L 符号连接-c是否字符设备-b是否块设备-s 文件非空例: 例6:6_test_file.sh条件测试条件测试字符串测试字符串测试 字符串测试: test str_operator “str” test “str1” str_operator “str2” str_operator “str” “str1” str_operator “str2” 其中st

14、r_operator可以是: = 两个字符串相等!= 两个字符串不相等 -z 空串-n 非空串字符串测试例字符串测试例7:7_test_string.sh条件测试条件测试数值测试数值测试测试数值格式如下: test num1 num_operator num2 num1 num_operator num2 num_operator可以是: -eq 数值相等 -ne 数值不相等 -gt 数1大于数2 -ge 数1大于等于数2 -le 数1小于等于数2-lt 数1小于数2数值测试例数值测试例8:8_test_num.sh控制结构控制结构ifif 条件1; then 执行第一段程序 else 执行第

15、二段程序 fiif 条件1; then 执行第一段程序 elif 条件2;then 执行第二段程序 else 执行第三段程序fi条件结构例条件结构例9:9_if_then.sh控制结构控制结构casecase $变量名称in “第一个变量内容”) 程序段一 ; “第二个变量内容”) 程序段二 ; *) 其它程序段 exit 1 esac case结构例结构例10:10_case1.sh 10_case2.sh控制结构控制结构for for ( 初始值; 限制值; 执行步阶) do 程序段 done 初始值:变量在循环中的起始值 限制值:当变量值在这个限制范围内时,就继续进行循环 执行步阶:每作

16、一次循环时,变量的变化量for结构例结构例11:11_for1.shdeclare是bash的一个内建命令,可以用来声明shell变量、设置变量的属性。declare也可以写作typeset。declare -i s 代表强制把s变量当做int型参数运算。控制结构例控制结构例12:12_while.sh6.3.5 函数函数有些脚本段间互相重复,如果能只写一次代码块而在任何地方都能引用那就提高了代码的可重用性。shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数。定义函数的两种格式:函数名() 命令. function 函数名() 命令. 函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用函数的定义函数的定义调用函数的格式为:函数名param1 param2 使用参数同在一般脚本中使

温馨提示

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

评论

0/150

提交评论