linuxshell脚本语言基础知识.docx
- 文档编号:28154008
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:20
- 大小:20.24KB
linuxshell脚本语言基础知识.docx
《linuxshell脚本语言基础知识.docx》由会员分享,可在线阅读,更多相关《linuxshell脚本语言基础知识.docx(20页珍藏版)》请在冰豆网上搜索。
linuxshell脚本语言基础知识
linuxshell脚本语言基础知识一.shell简介
Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。
用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。
shell是一个命令解释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。
在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。
Linux的Shell种类众多,常见的有:
BourneShell(/usr/bin/sh或/bin/sh)、BourneAgainShell(/bin/bash)、CShell(/usr/bin/csh)、KShell
(/usr/bin/ksh)、ShellforRoot(/sbin/sh),等等。
不同的Shell语言的语法有所不同,所以不能交换使用。
每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。
通常用Bash,也就是BourneAgainShell进行编程。
二.shell使用
1.建立和运行shell程序
shell脚本程序:
按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。
它可以进行类似程序的编写,并且不需要编译就能执行。
(只需修改其权限)
像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。
首先使用VIM编辑器编辑一个hello.sh文件:
#!
/bin/bash
#helloworldexample
echo"helloworld"
这样,一个最简单的shell程序就编写完了。
第一行:
#!
说明hello.sh这个文件的类型的,这有点类似于Windows系统下的用不同的文件后缀来表示不同的文件类型,但又不完全相同。
Linux系统根据#!
及该字符串后面的信息确定该文件的类型。
在#!
之后是一个路径名,这个路径名指定了一个解释脚本中命令的程序。
第二行:
“#helloworldexample”就是shell程序的注释,(但后面紧接着“!
”号的除外)
第三行:
echo(回显)语句的功能是把echo后面的字符串输出到标准输出中。
现在,建立和写好之后,那么该程序如何运行呢?
由于该脚本没有执行的权限,只需要修改其执行的权限即可,执行:
chmoda+xhello.sh。
然后输入命令:
./hello.sh即可看到效果。
2.shell变量
变量是一个存储值的实体,可以是一个名字,或者一个特殊的值。
shell可以创建,分配和删除变量。
(1)变量设置规则:
a.变量与变量内容以等号(=)来连接
b.等号两边不能直接接xx
c.变量名称只能是英文字母与数字或下划线,但是数字不能是开头符d.引用变量名用“$变量名”
#!
/bin/bash
#helloworldexample
a="helloworld"
echo$a
以上例子一样可以输出helloworld。
e.若有空格符可以使用双引号或单引号将变量内容结合起来,但必须注意,双引号的特殊字符可以保有变量的特性,但是单引号内的特殊字符则仅为一般字符。
#name="$LOGNAMEishh"//rootishh
#name='$LOGNAMEishh'//$LOGNAMEishh
f.通常大写字符为系统预设变量,自行设定的变量可以使用小写字符
(2)取消变量:
用unset变量名
#!
/bin/bash
#helloworld例子
a="helloworld"
unseta
echo$a
以上例子将不会打印出任何xx。
3.shell特殊变量
$0:
执行的脚本的文件名
$1:
脚本文件的第一个参数名
$#:
传递到脚本的参数个数
$*:
以一个单字符串显示所有向脚本传递的参数
$$:
脚本运行的当前进程ID号
$?
:
显示最后命令的退出状态,0表示没有错误,其它值表示有错误例子a.sh
#!
/bin/bash
echo"thefileis$0"
echo"theparameteris$1$2"
echo"numberofparameteris$#"
echo"allparameteris$*"
echo$?
加权限后执行./a.shhhmmgg
则打印
thefileis./a.sh
theparameterishhmm
numberofparameteris3
allparameterishhmmgg0
4.常用shell内嵌命令
(1)echo:
显示变量内容
(2)env:
显示目前系统中主要的预设变量内容
(3)set:
显示目前系统中全部的变量内容
(4)read:
从键盘读入变量内容
(5)declare:
声明变量内容
-a:
定义为数组array
-f:
定义为函数function
-i:
定义为整数integer
-r:
定义为“只读”
-x:
定义为透过环境输出变量、
例子:
#!
/bin/bash
a=1+1
declare-ib=1+1
echo$a
echo$b
执行后输出结果为1+12
5.条件测试
在写shell脚本时,经常遇到的问题就是判断字符串是否相等,可能还要检查文件状态或进行数字测试,只有这些测试完成才能做下一步动作。
test命令就是用于测试字符串,文件状态和数字的.test命令两种格式:
testcondition
或[condition]
使用方括号时,要注意在条件两边加上空格
三.shell脚本编程基础知识
1.shell基本运算符
(1)算术运算符
+:
对两个变量做加法。
-:
对两个变量做减法。
\*:
对两个变量做乘法。
/:
对两个变量做除法。
**:
对两个变量做幂运算。
%:
取模运算,第一个变量除以第二个变量求余数。
+=:
加等于,在自身基础上加第二个变量。
-=:
减等于,在第一个变量的基础上减去第二个变量。
*=:
乘等于,在第一个变量的基础上乘以第二个变量。
/=:
除等于,在第一个变量的基础上除以第二个变量。
%=:
取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量在使用这些运算符时,需要注意到运算顺序的问题。
例如输入下面的命令,输出1+2的结果。
echo1+2
Shell并没有输出结果3,而是输出了1+2。
在shell中有三种方法可以更改运算顺序。
a、用expr改变运算顺序。
可以用echo`expr1+2`来输出1+2的结果,用expr表示后面的表达式为一个数学运算。
需要注意的是,`并不是一个单引号,而是“Tab”键上面的那个符号。
b、用let指示数学运算。
可以先将运算的结果赋值给变量b,运算命令是b=let1+2。
然后用echo$b来输出b的值。
如果没有let,则会输出1+2。
c、用$[]表示数学运算。
将一个数学运算写到$[]符号的中括号中,中括号中的内容将先进行数学运算(中括号中可以包含空格)。
例如命令echo$[1+2],将输出结果3。
(2)关系运算符
-eq:
数值相等-ne:
数值不相等-ge:
数1大于等于数2-lt:
数1小于数2-gt:
数1大于数2-le:
数1小于等于数2输入test1-lt2&&echo"yes"则打印yes
(3)xx
-a:
(and)两状况同时成立!
test-rfile-a-xfile,则file同时具有r和x权限时,才为true。
-o:
(or)两状况任何一个成立!
test-rfile-o-xfile,则file具有r或x权限时,就为true。
!
:
相反状态,test!
-rfile,当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/bash
declare-ia=10
declare-ib=20
if[$a==$b];then
echo"aisequaltob"
fi
if[$a!
=$b];then
echo"aisnotequaltob"
fi
输出结果为:
aisnotequaltob
(2)if...else...fi语句结构
if[条件1];then
执行程序1
else
执行程序2
fi
例子:
#!
/bin/bash
declare-ia
echo"input1or2"
reada
if[[$a-eq1]];then
echo"1"
else
echo"2"
fi
打印为input1or211
(3)if...elif...else...fi语句结构
if[条件1];then
执行程序1
elif[条件2];then
执行程序2
else
执行程序3
fi
例子:
#!
/bin/bash
declare-ia=10
declare-ib=20
if[$a==$b];then
echo"aisequaltob"
elif[$a-gt$b];then
echo"aisgreaterthanb"
else
echo"aislessthanb"
fi
输出结果为:
aislessthanb
(4)case...esac语句结构
case$变量名称in
“第一个变量内容”)
程序1
;;
“第二个变量内容”)
程序2
;;
*)
其它程序
exit1
esac
例子:
#!
/bin/bash
echo"youlike"
echo"1isapple"
echo"2isorange"
echo"inputyourchoice"
reada
case$ain
1)
echo"youlikeapple"
;;
2)
echo"youlikeorange"
;;
*)
echo"youlikenothing"
exit1
esac
执行后结果为:
youlike
1isapple
2isorange
inputyourchoice1youlikeapple
3.shell循环类型
(1)for循环
循环操作项目清单。
重复一组命令列表中的每个项目。
语法一:
for((初始值;限制值;执行步阶))
do
程序
done
初始值:
变量在循环中的起始值
限制值:
当变量值在这个限制范围内时,就继续进行循环
执行步阶:
每作一次循环时,变量的变化量
例子:
#!
/bin/bash
declare-is
s=0
for((i=1;i<=100;i++))
do
s=s+i
done
echo"thesumis$s"
输出结果为:
thesumis50
语法二:
forvarincon1con2con3...//var是一个变量
do
程序
done
第一次循环时,$var的内容为con1
第二次循环时,$var的内容为con2
第三次循环时,$var的内容为con3
例子:
#!
/bin/bash
declare-aA
A=(12345678910)
declare-ic
foriin13579
do
c=c+A[$i];
done
echo"thecountis$c"
输出结果为:
thecountis30
(2)while循环
while循环,使您能够重复执行一组命令,直到某些条件发生。
它通常用于当你需要反复操纵的变量值。
语法如下:
while[条件]
do
程序
done
当条件成立的时候进入while循环,直到条件不成立时才退出循环例子:
#!
/bin/bash
declare-ia=0
while[$a-lt10]
do
echo$a
a=a+1
done
这将产生以下结果:
89
每一次执行这个循环,变量
10,则输出该值
(3)until循环a进行检查,看该值是否小于10。
如果a的值小于完美的情况下,你需要执行的一组命令某个条件为真时,while循环执行。
有时候,你需要执行一组命令,直到某个条件为真。
语法如下:
until命令
do
程序
done
这种方式与while循环恰恰相反,当命令成立的时候退出循环,否则继续循环例子:
#!
/bin/bash
declare-ia=0
until[$a-gt10]
do
echo$a
a=a+1
done
这将产生以下结果:
89
(4)select循环
语法如下:
selectvarinword1word2...
do
程序
done
例子:
#!
/bin/bash
echo"whatisthis?
"
selectiinteacofeewaterappleorangenone
do
case$iin
tea|cofee|water)
echo"drink"
;;
apple|orange)
echo"fruit"
;;
none)
break
;;
*)echo"ERROR:
Invalidselection"
;;
esac
done
打印信息为:
whatisthis?
1)tea
2)cofee
3)water
4)apple
5)orange
6)none
#?
1
drink
#?
6
四.shell数组
shell数组的使用
$a=(1233435)
$echo$a//默认获取第一个元素
123
$echo${a[1]}//通过下标访问
34
$echo${a[@]}//访问整个数组,@或者*获取整个数组
1233435
$echo${#a[@]}//获取数组的长度4$echo${#a[3]}//获取字符串长度1$echo${a[@]:
1:
2}//切片方式获取一部分数组内容
343
$echo${a[@]:
2}//从第二个元素开始
35
$echo${a[@]:
:
2}//到第二个元素
12334
应用实例:
#!
/bin/bash
declare-aa=(12345)
for((i=0;i<=4;i++))
do
echo${a[i]}
done
这将产生以下结果:
12345五:
shell函数
使用函数来执行重复性的任务,是一个很好的方式来创建代码的重用。
代码重用是现代面向对象编程的原则的重要组成部分。
1.创建函数:
声明一个函数语法:
function_name(){
例子:
#!
/bin/bash
#Defineyourfunctionhere
Hello(){
echo"HelloWorld"}#Invokeyourfunction
Hello
当你想执行上面的脚本,它会产生以下结果:
HelloWorld
2.参数传递给函数:
你可以定义一个函数,它接受参数,而调用这些函数。
将这些参数代表$1,$2,依此类推。
例子:
#!
/bin/bash
#Defineyourfunctionhere
Hello(){
echo"HelloWorld$1$2"}#Invokeyourfunction
HelloZhanglisi
这将产生以下结果:
HelloWorldZhanglisi
3.从函数的返回值:
例子:
#!
/bin/bash
#Defineyourfunctionhere
Hello(){
echo"HelloWorld$1$2"
return1}#Invokeyourfunction
HelloZhangsanlisi
r=$?
echo"Returnvalueis$r"
这将产生以下结果:
HelloWorldZhangsanlisi
Returnvalueis1
4.嵌套函数:
函数更有趣的功能之一是,他们可以调用本身以及调用其他函数。
被称为递归函数调用自身的函数。
例子:
#!
/bin/bash
#Callingonefunctionfromanother
one(){
echo"Thisisthefirstfunction"
two}two(){
echo"Thisisthesecondfunction"}#Callingfunctionone.
one
这将产生以下结果:
Thisisthefirstfunction
Thisisthesecondfunction
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linuxshell 脚本语言 基础知识
![提示](https://static.bdocx.com/images/bang_tan.gif)