版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编程基础作者TeachingObjectives教学目标知识目标技能目标素养目标了解Linuxshell编程掌握创建简单的shell脚本了解bash脚本基本语法、函数和重定向的一般使用通过对bash脚本基本语法、函数和重定向的了解,具备运用bash脚本进行Linuxshell编程能力。具备版权意识,在编写Linuxshell程序时不盗、不窃,增强原创意识具备一定的编程能力,能根据主题和目标进行有效策划bash脚本编写提高学生的团队合作能力、沟通能力培养职业意识和职业道德,正确的价值观、人生观、世界观CONTENTS目录01
关于Linuxshell编程02
创建简单的shell脚本03
Bash脚本基本语法04
bash脚本使用函数05
bash脚本重定向关于Linuxshell编程01Linuxshell双重角色定义
在Linux中shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的包括循环和分支控制结构。核心地位体现
shell是一种脚本语言,是最重要的实用程序集合,当shell执行程序、创建文件以及运行程序时,能调用Linux系统核心的大部分功能。所以对于我们来说,需要深入了解和熟练掌握shell的特性极其使用方法,也是用好Linux系统的关键要点。Shell的执行方式
交互式执行边执行边解释,用户输入一条命令,Shell就解释执行一条,适用于临时、少量的命令操作。
批处理执行用户写好包含多条命令的Shell脚本,Shell可一次性执行完,省去逐条敲命令的麻烦,适合大量、重复性的命令操作。
执行方式对比交互式灵活性高,即时反馈;批处理效率高,可自动化执行任务。bash
常见Shell类型Linux系统中常见的Shell有Bourneshell、BourneAgainshell、Cshell、Kshell、shellforRoot等,不同Shell语法有别。
bash的优势bash是Linux系统默认使用的Shell,易用且免费,在日常工作中被广泛使用。
bash的特点与内部命令bash是BourneAgainshell的缩写,内部命令有40个,大多数Linux系统默认采用。创建简单的shell脚本02Shell脚本文件的创建与运行创建shell脚本文件创建Shell脚本文件时,通常以.sh或.script作为结尾,方便快速识别该文件为Shell脚本文件。例子:
用以下内容建立一个名叫hello的文件,执行它,并查看结果。echo“hello,thisismyfirstshellfile!”#插入注释,在shell脚本中可以包含注释,通过关键字#来注释一条语句。
使用vim编辑器编辑一个以hello.sh为文件名的shell脚本文件,如图所示。
命令:vim/home/hello.sh运行shell脚本程序运行/home/hello.sh的shell脚本文件,如图所示。shell脚本程序的创建与运行
bash/sh命令运行可使用“bash/home/hello.sh”或“sh/home/hello.sh”命令运行脚本,通过此方式能执行脚本中的命令。
操作步骤说明运行脚本时,先确保脚本文件存在,然后在终端输入相应运行命令,即可启动脚本执行。
执行过程及结果查看运行脚本后,终端会显示脚本执行的结果,如示例中会输出“hello,thisismyfirstshellfile!”。Shell脚本文件的创建与运行编写及运行shell脚本文件说明我们从如两个图所示说明编写及运行shell脚本文件。A、第一行是用于指定解释器。Linux中提供的shell解释器有:#!/bin/bash#!/bin/sh#!/bin/bash#!/usr/bin/sh#!/usr/bin/bashB、第二行是echo命令用于在屏幕上显示消息。就是把hello,thisismyfirstshellfile!显示出来。C、第三行是注释语句"#”开头的是注释,一条单行注释,它将被shell忽略,而且不产生任何输出。当“<<EOF…EOF”或“<<!…!“为多行注释。是否具有可执行权可执行权限设置方法当脚本文件无执行权限时,可使用“chmoda+x/home/hello.sh”命令为文件增加可执行权限。不同权限运行方式有执行权限时,可通过手动开启指定解释器(如“sh/home/hello.sh”)、直接在当前环境运行(如“./home/hello.sh”或“source/home/hello.sh”)等方式运行;无执行权限时,设置权限后也可采用上述方式运行。普通用户运行安全性建议使用普通用户运行脚本,因为普通用户难以破坏系统,而root用户操作不当可能导致灾难性后果。bash脚本基本语法03基本语法变量类型在shell中有三种类型变量:局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行创建变量在bashshell中,变量不是必须被显式声明的,可以在任何时候通过简单的赋值来创建。所有的变量都由字符串组成。创建变量的语法为:<变量名>=<值>注意:当声明一个变量时,赋值操作符“=”的两边必须没有空格。如:message="helloworld"shell脚本中的变量不能被声明为整型或字符型,在Linux中的所有变量都被当作字符串,但是,可以进行数学运算。任何在脚本中创建的变量,当脚本停止执行时都会消失,但在提示符下创建的变量会被保留,直到系统注销终止shell时为止。基本语法给变量赋值A、引用变量$符号用于引用一个变量的内容。将一个变量的赋值给另外一个变量的命令是:变量1=${变量2},而“{}"是可省的。例子1:x=8y=$xecho$y编辑以上的内容,如图所示。命令:vim/home/study.sh#!/bin/Bashx=8y=$xecho$y保存,退出。运行,如图所示得到的运算结果。命令:sh/home/study.sh基本语法给变量赋值B、用键盘输入值赋给变量例子2:如我们用键盘读入一个名字name为“student”的例子命令:vim/home/study.sh#!/bin/bashecho-n"Enteryourname:"readname#键盘输入echo"Hello,$name"#显示键盘输入的内容运行命令:sh/home/study.sh基本语法给变量赋值B、用键盘输入值赋给变量例子:有时候变量名很容易与其他文字混淆。order=2echo"thisisthe$ordernd"编辑以上的内容命令:vim/home/study.sh!/bin/bashorder=2echo"thisisthe$ordernd"运行命令:sh/home/study.sh执行结果如上图所示,屏幕并不会输出“thisisthe2nd”,而仅仅输出“thisisthe”。shell会去搜索变量ordernd
的值,但是这个变量却没有值。可以使用花括号来告诉Shell要输出的是order变量,如下图两个所示。#!/bin/bashorder=2echo"thisisthe${order}nd"将输出:thisisthe2nd基本语法给变量赋值C、expr命令绝大部分shell不支持数字变量,所有变量都被当作字符串处理。那么要操作一些数字怎么办呢?可以使用expr命令,该命令用于求算术表达式的值。例子:使用expr命令,如图7-13、图7-14所示。expr5+5
该命令将会显示10,要注意的是:在运算符(+)两边必须有空格,也可以使用变量实现。例子:使用expr命令的第二个例子。a=5b=7expr$a+$b执行expr命令语句,如下图所示。将输出:12基本语法环境变量由于Linux是多用户系统,每个用户都分配一个Shell的副本用于工作。Shell也有称为环境变量的特殊变量,通过这些变量,用户可以配置环境。环境变量都是大写的,本书不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。一些环境变量的例子有:HOME、PS1、PS2、PATH、LOGNAME、SHLVL和SHELL。基本语法字符串变量使用单引号创建:var='test‘。这种方式创建的变量只能原样输出,变量无效,我们可以借用c语言中的“字符串常量”的定义理解这种特性。除此以外,单引号中不能出现单独的单引号,转义也是不可以的。使用双引号创建:var="mynameis${name}"这种方式创建的字符串变量有效,也可以出现转义符。基本语法数组定义一个数组方式如下:数组名=(元素1元素2元素3...元素n)指定数组对应下标的元素进行赋值:数组名[下标]=值同时指定多个数组元素进行赋值:数组名=([下标1]=值1[下标2]=值2...[下标n]=值n)引用数组对应下标的元素:
${数组名[下标]}运算符算术运算符算术运算符有加、减、乘、除、取余等表7-1算术运算符运算Shell中格式加法expr$a+$b减法expr$a-$b乘法expr$a*$b除法expr$b/$a取余expr$b%$a赋值a=$b相等[$a==$b]不相等[$a!=$b]说明:A.表格中的a和b都是变量。B.条件表达式需要放在方括号之间,并且要有空格。使用expr进行计算时需要使用反引号。例子1:算术运算,对以下进行编程,执行,结果如下两个图所示。#!/bin/Basha=10b=20echo"a+b=`expr$a+$b`"echo"a-b=`expr$a-$b`"echo"a*b=`expr$a*$b`"echo"a/b=`expr$a/$b`"echo"a%b=`expr$a%$b`"说明:等号两边没有空格,而加号两边有空格,且对所有的运算符来说两边都要求有空格。运算符算术运算符例子2:以下是在Bash脚本中进行加法和减法的示例。#!/bin/Bashread-p"Enterfirstnumber:"num1read-p"Entersecondnumber:"num2sum=$(($num1+$num2))sub=$(($num1-$num2))echo"Thesummationof$num1and$num2is$sum"echo"Thesubstractionof$num2from$num1is$sub"你可以执行shell脚本,使用你选择的任意数字作为参数。如果你尝试除法,会出现一个大问题。bash只使用整数。默认情况下,它没有小数的概念。因此,你会得到10/3的结果为3,而不是3.333。如图7-19、图7-20所示。命令:vim/home/123.sh命令:bash/home/123.sh运算符逻辑运算符
可以用逻辑运算符判断一个表达式的真和假。真值是任何一个非零的值,假值就是零。表7-2常用逻辑运算符运算符含义-o(表示or选项)或运算符,当两个值中有一个是真时,结果就为真;只有当两个值都为假时,结果才为假-a(表示and选项)与运算符,当两个值都为真时,结果才为真:否则为假表7-3逻辑符号运算shell中的实现主要符号逻辑的AND[[$a-lt100&&$b-gt100]]&&逻辑的OR[[$a-lt100||$b-gt100]]||运算符布尔运算符布尔运算符和逻辑运算符的区别:
语法上,逻辑运算需要双括弧,布尔运算只需要单大括弧功能上,逻辑运算具有特殊的短路功能,即是在AND运算中第一个表达式为false时则不执行第二个表达式,在OR运算中第一个表达式为true时不执行第二个表达式。表7-4布尔运算运算shell中的实现主要符号非运算[!false]!或运算[$a-lt20-o$b-gt100]-o与运算[$a-lt20-a$b-gt100]-a运算符关系运算符关系运算符只支持数字,不支持字符串,除非字符串的值是数字。表7-5关系运算符运算Shell中的实现主要符号检测两个数是否相等[$a-eq$b]-eq检测两个数是否不相等[$a-ne$b]-ne检测左边的数是否大于右边的[$a-gt$b]-gt检测左边的数是否小于右边的[$a-lt$b]-lt检测左边的数是否大于等于右边的[$a-ge$b]-ge检测左边的数是否小于等于右边的[$a-le$b]-le运算符字符串运算符表7-6常用的字符串运算符运算Shell中的实现主要符号检测两个字符串是否相等[$a=$b]=检测两个字符串是否不相等[$a!=$b]!=检测字符串长度是否为0[-z$a]-z检测字符串长度是否不为0[-n“$a”]-n检测字符串是否为空[$a]$控制语句shell程序,也称为Shell脚本,是一种文本文件,其中包含一系列在Unix、Linux或MacOS等操作系统的命令行环境(Shell)中可执行的命令。它可以将多个命令组合在一起,实现自动化的任务处理,提高工作效率。如图所示的Shell程序结构。控制语句--顺序结构
顺序结构的概念顺序结构是程序设计中最简单的逻辑结构,它按照解决问题的顺序写出相应语句,执行顺序自上而下,依次执行。
顺序结构的特点顺序结构是最基本的程序结构,按书写先后顺序从前到后执行,每个语句的执行依赖前一个语句的完成,简单明了、易于理解和实现。例子:用vim编辑shell文件/home/hao.bash。命令:vim/home/hao.bash#!/bin/sh#指明解释器为/bin/shcd/home/#进入/home目录touch123.txt#创建123.txt文本mkdir/home/hao#在/home目录中创建hao目录命令:bash/home/hao.bash执行结果如图所示,创建了123.txt文本和hao目录的两个文件。控制语句--分支结构if分支语句有单分支、二分支和多分支,语法表达式:if[条件表达式];then
...//条件为成立时执行的代码else
...//否则,执行这一的代码fi例子:一个使用if-else语句的bash脚本示例。编辑如图所示。#!/bin/bashread-p"Enterthenumber:"nummod=$(($num%2))if[$mod-eq0];thenecho"Number$numiseven"elseecho"Number$numisodd"fi命令:vim/home/123.sh运行它,你应该能看到这样的结果,如图所示。命令:bash/home/123.sh控制语句--分支结构case分支语句语法表达式:case变量in
模式1)
执行命令1;;
模式2|模式3)#多个模式用|分隔执行命令2;;*)#默认分支(匹配任意值)默认命令;;esac例子:用vim编辑Shell文件/home/hao.bash#!/bin/bash#指明解释器为/bin/bash判断命令行第一个参数的值。case$1in[0-9])echo"digital";;[a-z])echo"lowerchar";;[A-Z])echo"Upperchar";;"Good")echo"OK";;*)echo"other";;esac说明:如命令行输入命令:当判断输入值为0-9中的一个时,显示“digital”;当判断输入值为a-z中的小写字母时,显示“1owerchar”;当判断输入值为A-Z中的大写字母时,显示“upperchar”;当判断输入值为Good时,显示“OK”;当输入其他任何一个符号时,显示“other”。case语句结束命令:vim/home/hao.bash命令:bash/home/hao.bash控制语句--循环结构
循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件判断是否继续执行某个功能或退出循环。循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题。循环结构是程序设计中最重要的程序结构之一,能够发挥计算机的特长,进行高速运算和完成大量有规律的重复性操作。bash支持三种类型的循环:for、while和until。
控制语句--循环结构for
for循环语句语法forfor语句语法表达式:for(数据类型变量名:可迭代对象){//循环体代码}循环语句语法表达式Done其中的变量从左至右依次赋in后面的值,每赋值一次,就执行一遍,直到赋值完。
例子:用vim编辑Shell文件/home/forexam.bash,编辑内容:#!/bin/bash#指明解释器为/bin/Bashforiin123456doecho-n"$i次|"done说明:#共循环6次,最终显示的结果是:#1次|2次|3次|4次|5次|6次|命令:vim/home/forexam.bash控制语句--循环结构for
for的例子例子:for的另一个例子,/home/forexam2.bash。编辑内容:#!/bin/bashfornumin{1..10};doecho$numdone命令:vim/home/forexam2.bash命令:bash/home/forexam2.bash运行它,你将看到以下输出:控制语句--循环结构while
while循环语句语法while[条件];do#循环体(当条件为true时执行的代码)done
执行流程(A)检查条件是否为true。(B)如果条件为true,执行循环体内的代码。(C)执行完循环体后,再次检查条件。(D)重复上述步骤,直到条件变为false,退出循环。例子3:选择与上一例子相同的内容,使用while循环编写程序。编辑内容:#!/bin/bashnum=1while[$num-le10];doecho$numnum=$(($num+1))done命令:bash/home/while.bash命令:vim/home/while.bash控制语句--循环结构until
until循环语句语法until[条件表达式]do#循环体done
例子4:同样的例子,可以使用until循环来编写程序。编辑内容:#!/bin/bashnum=1until[$num-gt10];doecho$numnum=$(($num+1))done命令:vim/home/until.bash命令:bash/home/until.bashwhile循环和until循环非常相似。区别在于:while循环在条件为真时运行,而until循环在条件为假时运行。bash脚本使用函数04定义函数
shell中定义函数格式function_name(){commands }
注意:当函数没有return时,默认返回最后一个命令的运行结果作为返回值。bash脚本使用函数例子
下面是一个使用函数的例子。命令:vim/home/study.sh#!/bin/bashsum(){sum=$(($1+$2))echo"Thesumof$1and$2is:$sum"}echo"Let'susethesumfunction"sum15运行该脚本以下输出:命令:sh/home/study.shbash脚本重定向05关于重定向
01
一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
一般情况下,每个Unix/Linux命令运行时都会打开三个文件:A、标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。B、标准输出文件(stdout):stdout的文件描述符为1,Unix程序默认向stdout输出数据。C、标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。但有些时候我们可能需要将数据从其它文件读入或读出,这就需要我们重定向。输入、输出重定向
02输出重定向
同输入重定向很相似,输出重定向也是将本来需要输出标准输出文件stdout中转化为我们的指定文件中。语法如下:command1>file
01输入重定向
我们可以让命令从文件中获取,这样本来的命令需要从标准输入stdin中获取,转换为从我们的指定文件中获取。这样本来需要从键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国淋巴瘤诊疗指南总结2026
- 2025-2030中国四氯化铪行业投资商机及未来前景竞争力剖析报告
- (2026.04.18)在X镇第二季度安全生产工作专题会议上的讲话
- 主题教育实践活动总结-1
- 七年级数学上册的教学计划5篇
- 厂房通信综合布线方案设计详解
- 厂区食堂承包合同
- 2026年贵州遵义市中考历史真题试题(含答案)
- 2025年广西壮族自治区南宁市初二地生会考试题题库(答案+解析)
- 2025年云南省玉溪市初二地生会考考试题库(附含答案)
- 医院医德医风培训
- 大功率电源及系统行业员工职业发展规划与管理
- 节能降耗培训课件
- 领取基本养老金申请表
- 2023年考研考博考博英语河北工业大学考试高频考点参考题库答案
- 糖尿病饮食与运动-糖尿病饮食营养课件
- 基于1+X证书制度构建“岗课赛证”融通模式的典型案例
- 某水电站×kN坝顶双向门机安装质量检测记录表
- GB/T 1401-1998化学试剂乙二胺四乙酸二钠
- GA 884-2018公安单警装备催泪喷射器
- 名师课件:部编版(新)高中历史必修中外历史纲要(上)第20课《北洋军阀统治时期的政治经济与文化》
评论
0/150
提交评论