linux+shell脚本语言基础知识.doc

上传人:豆**** 文档编号:23954636 上传时间:2022-07-02 格式:DOC 页数:67 大小:158KB
返回 下载 相关 举报
linux+shell脚本语言基础知识.doc_第1页
第1页 / 共67页
linux+shell脚本语言基础知识.doc_第2页
第2页 / 共67页
点击查看更多>>
资源描述

《linux+shell脚本语言基础知识.doc》由会员分享,可在线阅读,更多相关《linux+shell脚本语言基础知识.doc(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datelinux+shell脚本语言基础知识linux+shell脚本语言基础知识linux shell脚本语言基础知识一.shell简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。 shell是一个命令解

2、释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。通常用Bash,

3、也就是Bourne Again Shell进行编程。 二.shell使用 1.建立和运行shell程序 shell脚本程序:按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。它可以进行类似程序的编写,并且不需要编译就能执行。(只需修改其权限)像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。首先使用VIM编辑器编辑一个hello.sh文件: #!/bin/bash #hello world example echo hello world这样,一个最简单的shell程序就编写完

4、了。第一行:#!说明hello.sh这个文件的类型的,这有点类似于Windows系统下的用不同的文件后缀来表示不同的文件类型,但又不完全相同。Linux系统根据#!及该字符串后面的信息确定该文件的类型。在#!之后是一个路径名,这个路径名指定了一个解释脚本中命令的程序。第二行:“#hello world example”就是shell程序的注释,(但后面紧接着“!”号的除外)第三行:echo(回显)语句的功能是把echo后面的字符串输出到标准输出中。现在,建立和写好之后,那么该程序如何运行呢?由于该脚本没有执行的权限,只需要修改其执行的权限即可,执行:chmod a+x hello.sh。然后输

5、入命令:./hello.sh即可看到效果。 2.shell变量 变量是一个存储值的实体,可以是一个名字,或者一个特殊的值。shell可以创建,分配和删除变量。(1)变量设置规则:a.变量与变量内容以等号(=)来连接b.等号两边不能直接接空格符c.变量名称只能是英文字母与数字或下划线,但是数字不能是开头符d.引用变量名用“$变量名” #!/bin/bash #hello world example a=hello world echo $a以上例子一样可以输出hello world。e.若有空格符可以使用双引号或单引号将变量内容结合起来,但必须注意,双引号的特殊字符可以保有变量的特性,但是单引号

6、内的特殊字符则仅为一般字符。#name=$LOGNAME is hh /root is hh#name=$LOGNAME is hh /$LOGNAME is hhf.通常大写字符为系统预设变量,自行设定的变量可以使用小写字符 (2)取消变量:用unset 变量名 #!/bin/bash#hello world 例子a=hello worldunset aecho $a以上例子将不会打印出任何东西。 3.shell特殊变量 $0 :执行的脚本的文件名$1 :脚本文件的第一个参数名$# :传递到脚本的参数个数$* :以一个单字符串显示所有向脚本传递的参数$ :脚本运行的当前进程ID号$? :显示

7、最后命令的退出状态,0表示没有错误,其它值表示有错误例子a.sh#!/bin/bashecho the file is $0echo the parameter is $1 $2echo number of parameter is $#echo all parameter is $*echo $?加权限后执行./a.sh hh mm gg则打印the file is ./a.shthe parameter is hh mmnumber of parameter is 3all parameter is hh mm gg04.常用shell内嵌命令 (1)echo:显示变量内容(2)env:显

8、示目前系统中主要的预设变量内容(3)set:显示目前系统中全部的变量内容(4)read:从键盘读入变量内容(5)declare:声明变量内容-a:定义为数组 array-f:定义为函数 function-i:定义为整数 integer-r:定义为“只读”-x:定义为透过环境输出变量、例子:#!/bin/basha=1+1declare -i b=1+1echo $aecho $b执行后输出结果为 1+1 2 5.条件测试 在写shell脚本时,经常遇到的问题就是判断字符串是否相等,可能还要检查文件状态或进行数字测试,只有这些测试完成才能做下一步动作。test命令就是用于测试字符串,文件状态和数

9、字的.test命令两种格式:test condition或 condition 使用方括号时,要注意在条件两边加上空格 三.shell脚本编程基础知识 1.shell基本运算符 (1)算术运算符 +:对两个变量做加法。 -:对两个变量做减法。 *:对两个变量做乘法。 /:对两个变量做除法。 *:对两个变量做幂运算。 %:取模运算,第一个变量除以第二个变量求余数。 +=:加等于,在自身基础上加第二个变量。 -=:减等于,在第一个变量的基础上减去第二个变量。 *=:乘等于,在第一个变量的基础上乘以第二个变量。 /=:除等于,在第一个变量的基础上除以第二个变量。 %=:取模赋值,第一个变量对第二个变

10、量取模运算,再赋值给第一个变量在使用这些运算符时,需要注意到运算顺序的问题。例如输入下面的命令,输出1+2的结果。echo 1+2Shell并没有输出结果3,而是输出了1+2。在shell中有三种方法可以更改运算顺序。a、 用expr改变运算顺序。可以用echo expr 1 + 2来输出1+2的结果,用expr表 示后面的表达式为一个数学运算。需要注意的是,并不是一个单引号,而是“Tab”键上面的那个符号。b、用let指示数学运算。可以先将运算的结果赋值给变量b,运算命令是b=let 1 + 2。然后用echo $b来输出b的值。如果没有let,则会输出1+2。c、用$表示数学运算。将一个数

11、学运算写到$符号的中括号中,中括号中的内容将先进行数学运算(中括号中可以包含空格)。例如命令echo $1+2,将输出结果3。 (2)关系运算符 -eq:数值相等 -ne:数值不相等 -ge:数1大于等于数2-lt:数1小于数2 -gt:数1大于数2 -le:数1小于等于数2输入test 1 -lt 2 & echo yes则打印yes (3)布尔运算 -a:(and)两状况同时成立!test -r file -a -x file,则file同时具有r和x权限时,才为true。-o:(or)两状况任何一个成立!test -r file -o -x file,则file具有r或x权限时,就为tr

12、ue。!:相反状态,test ! -r file,当file不具有r权限时,就为true。 (4)字符串运算符 =:两个字符串相等 !=:两个字符串不相等-z:空串 -n:非空串输入test a = a & echo yes则打印yes (5)测试文件状态的条件表达式: -e:是否存在 -d:是目录 -f:是文件-L:符号连接 -s文件非空 -r:可读-w:可写 -x:可执行 2.shell条件语句 (1)if.fi语句结构 if 条件1;then执行程序fi例子:#!/bin/bashdeclare -i a=10declare -i b=20if $a = $b ;thenecho a i

13、s equal to bfi if $a != $b ;thenecho a is not equal to bfi输出结果为: a is not equal to b (2)if.else.fi语句结构 if 条件1;then执行程序1else执行程序2fi例子:#!/bin/bashdeclare -i aecho input 1 or 2read aif $a -eq 1 ;thenecho 1elseecho 2fi 打印为 input 1 or 2 1 1 (3)if.elif.else.fi语句结构 if 条件1;then执行程序1elif条件2;then执行程序2else执行程序

14、3fi例子:#!/bin/bashdeclare -i a=10declare -i b=20if $a = $b ;thenecho a is equal to belif $a -gt $b ;thenecho a is greater than belseecho a is less than bfi输出结果为: a is less than b (4)case.esac语句结构 case $变量名称 in“第一个变量内容”)程序1;“第二个变量内容”)程序2;*)其它程序exit 1esac例子:#!/bin/bashecho you likeecho 1 is appleecho 2

15、 is orangeecho input your choiceread acase $a in1)echo you like apple;2)echo you like orange;*)echo you like nothingexit 1esac执行后结果为:you like1 is apple2 is orangeinput your choice1you like apple 3.shell循环类型 (1)for循环 循环操作项目清单。重复一组命令列表中的每个项目。语法一:for ( 初始值; 限制值; 执行步阶 )do程序done初始值:变量在循环中的起始值限制值:当变量值在这个限

16、制范围内时,就继续进行循环执行步阶:每作一次循环时,变量的变化量例子:#!/bin/bashdeclare -i ss=0for ( i=1; i=100; i+ )dos=s+idoneecho the sum is $s输出结果为: the sum is 5050 语法二:for var in con1 con2 con3 ./var是一个变量do程序done第一次循环时,$var的内容为con1第二次循环时,$var的内容为con2第三次循环时,$var的内容为con3例子:#!/bin/bashdeclare -a AA=(1 2 3 4 5 6 7 8 9 10)declare -i

17、 cfor i in 1 3 5 7 9doc=c+A$i;doneecho the count is $c输出结果为: the count is 30 (2)while循环 while循环,使您能够重复执行一组命令,直到某些条件发生。它通常用于当你需要反复操纵的变量值。语法如下:while 条件 do程序done当条件成立的时候进入while循环,直到条件不成立时才退出循环例子:#!/bin/bashdeclare -i a=0while $a -lt 10 doecho $aa=a+1done这将产生以下结果:0123456789每一次执行这个循环,变量a进行检查,看该值是否小于10。如果

18、a的值小于10,则输出该值 (3)until循环 完美的情况下,你需要执行的一组命令某个条件为真时,while循环执行。有时候,你需要执行一组命令,直到某个条件为真。语法如下:until 命令do程序done这种方式与while循环恰恰相反,当命令成立的时候退出循环,否则继续循环例子:#!/bin/bashdeclare -i a=0until $a -gt 10 doecho $aa=a+1done这将产生以下结果:0123456789 (4)select循环 语法如下:select var in word1 word2 .do程序done例子:#!/bin/bashecho what is

19、 this?select i in tea cofee water apple orange nonedocase $i intea|cofee|water)echo drink;apple|orange)echo fruit;none)break;*) echo ERROR: Invalid selection;esacdone打印信息为:what is this?1) tea2) cofee3) water4) apple5) orange6) none#? 1drink#? 6 四.shell数组 shell数组的使用 $ a=(123 34 3 5)$ echo $a / 默认获取第一

20、个元素123$ echo $a1 / 通过下标访问34$ echo $a / 访问整个数组 ,或者* 获取整个数组123 34 3 5$ echo $#a / 获取数组的长度4$ echo $#a3 / 获取字符串长度1$ echo $a:1:2 / 切片方式获取一部分数组内容34 3$ echo $a:2 / 从第二个元素开始3 5$ echo $a:2 / 到第二个元素123 34 应用实例: #!/bin/bashdeclare -a a=(1 2 3 4 5 )for ( i=0; i=4; i+ )doecho $aidone这将产生以下结果:12345 五:shell函数 使用函数

21、来执行重复性的任务,是一个很好的方式来创建代码的重用。代码重用是现代面向对象编程的原则的重要组成部分。 1.创建函数: 声明一个函数语法: function_name () list of commands 函数名 function_name,这就是你将使用它从其他地方在你的脚本调用。函数名必须遵循括号内,后括号内的命令的列表。例子:#!/bin/bash# Define your function hereHello () echo Hello World # Invoke your functionHello 当你想执行上面的脚本,它会产生以下结果: Hello World 2.参数传递给

22、函数: 你可以定义一个函数,它接受参数,而调用这些函数。将这些参数代表$1,$2,依此类推。例子:#!/bin/bash# Define your function hereHello () echo Hello World $1 $2 # Invoke your functionHello Zhang lisi 这将产生以下结果: Hello World Zhang lisi 3.从函数的返回值:例子:#!/bin/bash# Define your function hereHello () echo Hello World $1 $2return 1 # Invoke your func

23、tionHello Zhangsan lisi # Capture value returnd by last commandr=$? echo Return value is $r这将产生以下结果:Hello World Zhangsan lisiReturn value is 1 4.嵌套函数: 函数更有趣的功能之一是,他们可以调用本身以及调用其他函数。被称为递归函数调用自身的函数。例子:#!/bin/bash# Calling one function from anotherone () echo This is the first functiontwo two () echo This is the second function # Calling function one.one这将产生以下结果:This is the first functionThis is the second function -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁