LinuxShell编程快速入门讲解.docx

上传人:b****5 文档编号:4209992 上传时间:2022-11-28 格式:DOCX 页数:17 大小:565.67KB
下载 相关 举报
LinuxShell编程快速入门讲解.docx_第1页
第1页 / 共17页
LinuxShell编程快速入门讲解.docx_第2页
第2页 / 共17页
LinuxShell编程快速入门讲解.docx_第3页
第3页 / 共17页
LinuxShell编程快速入门讲解.docx_第4页
第4页 / 共17页
LinuxShell编程快速入门讲解.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

LinuxShell编程快速入门讲解.docx

《LinuxShell编程快速入门讲解.docx》由会员分享,可在线阅读,更多相关《LinuxShell编程快速入门讲解.docx(17页珍藏版)》请在冰豆网上搜索。

LinuxShell编程快速入门讲解.docx

LinuxShell编程快速入门讲解

Linuxshell编程快速入门

——李朝征——

一、上半部分:

理论

1、Shell简介

1)常见的shell版本有BourneShell(简称sh)、C-Shell(简称csh)、KornShell

(简称ksh)和BourneAgineShell(简称bash).

2)我们通常用的shell是bash,它在如图的位置:

3)我们的Ubuntu下的功能:

历史记忆功能、命令行补全功能、支持通配符功能、Shell内置命令以及执行用户自己编写的Shell脚本等都是bash的功劳;

4)我们的“终端”本身就是一个shell,简称shell终端。

我们的shell命令诸如ls、sudo、rm等多达5000多条,在shell中都是以“C语言”的形式存在的,命令本身只不过是个运行那段相应的C语言代码的标记符号。

5)Shell常用的命令(这个自己学)。

6)我们编程有三种基本的说法:

C编程、Makefile编程和Shell编程,其中shell编程又叫做“shell脚本编程”,编出来的程序叫“脚本”。

7)Linux默认的Shell即为bash,当用户进入终端时,Linux系统会自动启动shell程序,与用户交互式进行操作,解析用户输入的命令,Shell提供一种高级编程语言,它有变量、关键字及控制语句,并且有自己的语法结构。

8)用户可以根据自己的需要方便地使用shell编程语言自己编写shell脚本。

使用shell脚本能大大地提高编程的效率。

9)Shell程序是解释执行的,不需要编译加载目标代码;shell脚本的建立同普通的文件建立方式是相同的,利用编辑器(vi、emacs、gedit均可)进行程序编写、录入和编辑。

10)Shell脚本有3种执行的方法:

直接执行法:

重定向执行法:

可执行文件法:

刚建立的wifi.sh文件显示为白色,即没有可执行权限。

我们可以先修改它的权限,使得所有用户都可执行。

如图:

或者改成最高权限:

这样就可以执行了:

2、shell的变量

1)shell有两类变量:

环境变量和临时定义变量。

环境变量时永久性的变量,其值不会随shell脚本的结束而消失,而临时变量时shell内部变量,其使用范围仅限于它的程序,当程序执行完毕时,临时变量消失。

大小写表示的变量的意义是不同的,即严格区分大小写。

2)如何定义临时变量?

变量赋值的一般形式为:

变量名=字符串如:

mypath=/home/wth/就是把/home/wth/赋给变量mypath。

但是要使用这个变量的时候就要在变量前面加一个“$”符号,如:

打印的效果如下:

3)与普通程序不同,bash程序第一行一般为“#!

/bin/bash”,其中#表示注释,!

表示shell运行感叹号之后的程序,即bash程序,让bash程序去运行我们写的脚本程序。

4)Shell的主要环境变量:

HOME变量和PATH变量,当然还有其他的。

HOME变量时用户保存用户主目录的位置,在/etc/pasmd文件中定义,用户登录终端时的起始路径就为主目录的位置。

在编写shell脚本的时候经常会用到HOME变量。

例如:

当前HOME变量设置为/usr/local/games/qq/games,当用户编程要使用这个目录的时候,输入“cat/usr/local/games/qq/games/qq.txt”这样一行长的命令可能比较麻烦,但是,如果用户直接输入“cat$HOME/qq.txt”,这样就会省时省力。

PATH变量是一样的道理。

3、shell的特殊字符

1)shell中除了可以使用普通字符外,还可以使用一些特殊的字符,如通配符、引号、注释、管道等,它们各自有自己特定的含义,使用这些特殊的符号可以大大提高编程的效率,提高文件的可执行性。

2)通配符:

通配符用于模式匹配,如文件名匹配、路径搜索、字符串查找等。

常用的通配符有:

*?

[]

*匹配任意字符

匹配一个或多个在它前面的字符

[]匹配括号中的任意一个字符,可用短画线表示范围,如:

[a-z]

3)双引号

除$、反斜杠\及倒引号(`)外,由双引号引起来的字符均作为普通字符对待。

练习:

建立一个名为wifi.sh的shell文件如下:

运行一下,看效果。

原因自己归纳!

4)单引号

单引号引起来的一切东西均当做普通字符来对待,一切特殊字符在单引号里面都失去其本来的意义,包括环境变量、转义字符、倒引号、反斜杠等所有。

5)倒引号

倒引号引起来的字符串被shell解释为命令行,在执行时shell会先执行该命令,并以它的标准输出结果代替整个倒引号的部分。

如:

结果:

6)行结束符号“;”

在命令行中的命令通常在命令尾部,用一个换行符作为命令的结束,然而bash用“;”作为各个命令之间的分隔符。

按下回车键后,bash将从首行到尾行按顺序执行每一条命令。

分号表示bash的前一个命令已经结束。

7)输入重定向符“<”

8)输出重定向符“>”

编写一个shell脚本名为wifi.sh如下:

运行的时候将结果重定向到一个全新的文件中(000.c):

在000.c文件中结果如下(用vi进入000.c中):

也可以用命令查看:

如果原来没有000.c这个文件,则系统默认在当前目录下建立新文件。

8)注释符

Shell程序中以“#”开头的正文表示为注释。

一般而言,编写shell程序第一行都要使用“#!

”作为开头,之后就是所使用的shell的绝对路径,对于bash脚本,第一行一般都是:

#!

/bin/bash

当然还有其他的,需要大家自己去总结了!

4、shell的算术运算

在bash中执行“整数的算术运算”命令是let,其语法格式为:

Let表达式

其中表达式为单独的算术表达式,这里的算术表达式同C语言基本类似,也具有语法、优先级等之分,几乎任何整性的运算符它都支持。

但是与其他高级语言不同的是:

在bash算术运算中,系统不检查数据额溢出。

5、shell程序位置参数

执行shell脚本可以带有实参。

在Linux中,可以使用从命令行中输入实参的方法代替脚本中需要的变量参数,或者传递给函数,因为这类变量与命令行上具体位置的实参相对应,因此称为位置变量。

具体格式为:

脚本名m1m2m3…mn

其中实参m1与脚本中的位置变量$1相对应,以此类推。

如图,建立名为wifi.sh的shell脚本:

注意输入方式与结果的对应性:

这里在命令行中除输入运行此程序的命令“./wifi.sh”外,还要输入位置参数。

6、shell程序流程控制结构

1)数值测试

参数

功能

N1-eqn2

如果n1等于n2,则测试为真

N1–nen2

如果n1不等于n2,则测试为真

N1–ltn2

如果n1小于n2,则测试为真

N1–len2

如果n1小于或者等于n2,则测试为真

N1–gtn2

如果n1大于n2,则测试为真

N1–gen2

如果n1大于或者等于n2,则测试为真

2)逻辑运算测试

参数

功能

表达式

逻辑非

表达式1-a表达式2

逻辑与

表达式1-o表达式2

逻辑或

3)if条件控制语句

①shell程序中的条件分支是通过if条件语句来实现的,其一般格式为:

if条件命令

then

条件为真时的命令串

else

条件为假时的命令串

fi

②如果有多个判断的情况,可以使用elif,具体格式如下:

if条件命令1

then条件为真时的命令串1

elif条件命令2条件为真时的命令串2

elif条件命令3条件为真时的命令串3

……

else条件为假时的命令串

fi

4)case条件选择语句

case语句允许进行多重条件的选择,其语法为:

case字符串in

与字符串匹配的字符串1)命令

……

命令;;

与字符串匹配的字符串2)命令

……

命令;;

……

与字符串匹配的字符串n)命令

……

命令;;

esac

注:

其执行过程,用字符串的值依次和字符串1、字符串2……字符串n进行比较,如果与其中任何一个匹配,则执行该匹配字符串后的命令。

如果没有任何的匹配,则不执行任何操作。

 

5)while和until循环语句

在bash的编程中循环语句是必不可少的一部分。

While和until语句是循环语句中经常使用的两种循环方式。

While循环语句的主要格式如下:

While条件

do

命令

done

其执行的过程是:

先进行条件测试,条件为真则进入循环体(do-done之间的部分),处理相应的命令;当前操作完成,接着判断条件,条件还满足再次进入循环体,以此进行循环,直到测试条件为假时不再进入循环体。

而与while循环基本类似的一个循环命令为until循环,它的格式如下:

Until测试条件

do

命令

done

注意:

until语句的执行过程同while很相似,until循环和while循环的区别在于:

while循环在条件为真时继续执行循环,而until则是在条件为假时继续执行循环。

6)for循环语句

for循环的一般格式为:

for变量名

[in数值列表]

do

若干个命令行

done

注意:

变量名可以是用户选择的额任何字符串,如果变量名是temp,则在in之后给出的数值将顺序替换循环命令列表中的$temp。

例如:

fornumberin123456789

do

echo$number

done

其执行过程为:

变量number分别取代后面的值“123456789”,即第一次赋值1,然后进入循环体打印这个数字1;第二次赋值2,打印2,以此类推;最后以此赋值9,打印完9后结束当前循环。

注意:

如果语法格式中省略了in,则变量var的取值将是位置参数,对变量的每一个可能的赋值都将执行do和done之间的命令列表。

 

7)函数调用语句

在shell中定义函数。

Shell中的函数实际上也是由若干条shell命令组成的。

因此它与shell程序形式上是相似的,不同之处在于,它不是一个单独的进程,而是shell程序的一部分。

Shell中的函数定义很简单,格式如下:

function函数名()

{

命令

}

或者

函数()

{

命令

}

注意1:

shell中要求函数定义必须在函数使用之前。

当函数调用时,可以直接使用函数名,不必带圆括号,就像使用命令一样。

Shell脚本与函数见的参数传递可以利用位置参数和变量直接传递,变量的值可以由shell脚本传递给被调用的函数,例如,函数中所用的位置参数$1、$2、$3,对应于函数调用语句中的实参。

注意2:

通常在函数的而最后一个命令执行之后,就退出被调用函数,利用return命令退出函数,其语法格式如下:

returnn

n就为退出函数的返回值,主函数可使用$?

调用其数值。

?

表示紧接着的上面的函数。

二、下半部分:

shell脚本编写实例

下面给出一个综合的shell脚本编写实例来练习我们上面讲述的理论。

【shell脚本】给定一个不大于5位数的正整数,要求通过其编写shell脚本。

1)判断输入的是几位数?

2)分别打印出每一位数字;

3)如果输入的最后位为偶数,则将当前的目录下所有的以.h为扩展名的而文件删除(假设当前目录中存在.h文件),如果为奇数,判断该输入的数字是否为素数。

4)判断输入的为即为数字,简单的判断方法是,判断输入数的大小,如输入567,则在100~999之间,因此就是3位数,依次类推。

5)判断万位上的数字,只需将输入的数字除以10000后取整即可;判断千位上的数字可将输入数字对10000取余后整除1000;判断百位上数字将输入数字对1000取余后整除100;判断十位上的数字同上;判断个位的数字,只需将此数对10取余即可。

6)删除以.h结尾的文件,只需使用for循环即可。

判断是否为素数,假设输入n,只需连续对2、3、4……n/2整除,如果期间有一个数字能被整除,那么就不是素数,如果所有数字都不能被整除,那么就为素数。

通过上述分析,流程大致如图所示。

结合上述流程图,新建shell脚本程序shuzi.sh,在shuzi.sh文件中输入如下代码:

#!

/bin/bash

functionwan()

{

letwan=$1/10000

return$wan

}

functionqian()

{

letqian=`expr$1%10000`/1000

return$qian

}

functionbai()

{

letbai=`expr$1%1000`/100

return$bai

}

 

functionshi()

{

letshi=`expr$1%100`/10

return$shi

}

functionge()

{

letge=`expr$1%10`

return$ge

}

if[$1–lt0–o$1–gt99999]

then

echo“输入错误,请输入1-9999!

之间的数字”

exit

fi

if[$1–le99999–a$1–ge10000]

then

echo“是五位数,分别是:

wan$1

result=$?

echo“第五位是:

”$result

qian$1

result=$?

echo“第四位是:

”$result

bai$1

result=$?

echo“第三位是:

”$result

shi$1

result=$?

echo“第二位是:

”$result

ge$1

result=$?

echo“第一位是:

”$result

elif[$1–lt9999–a$1–ge1000]

then

echo“是四位数,分别是:

qian$1

result=$?

echo“第四位是:

”$result

bai$1

result=$?

echo“第三位是:

”$result

shi$1

result=$?

echo“第二位是:

”$result

ge$1

result=$?

echo“第一位是:

”$result

elif[$1–lt999–a$1–ge100]

then

echo“是三位数,分别是:

bai$1

result=$?

echo“第三位是:

”$result

shi$1

result=$?

echo“第二位是:

”$result

ge$1

result=$?

echo“第一位是:

”$result

elif[$1–lt99–a$1–ge10]

then

echo“是两位数,分别是:

shi$1

result=$?

echo“第二位是:

”$result

ge$1

result=$?

echo“第一位是:

”$result

else

ge$1

result=$?

echo“唯一的一位数字是:

”$result

fi

case$resultin

[24680])

foriin*.h

do

rm$i

echo“文件$i已经被删除!

done;;

[13579])

letj=2

while[$j–le$1]

do

letz=`expr$1%$j`

if[$z–eq0]

then

echo$1不是一个素数!

exit

fi

letk=$1/2

if[$j–gt$k]

then

echo$1是一个素数!

exit

fi

letj=j+1

done

esac

 

归纳:

1)shell编程里面有很多比较隐蔽的、不易察觉的、容易导致错误的因素,比如空格、分号或者某些固定格式。

上面的代码是在word下编辑的,如果把它拷贝到Ubuntu下,肯定会有一些错误的,通过检查这些错误,我们能很好地理解Linuxshell编程。

2)比如如下的错误是因为多了一些空格:

3)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1