SHELL编程教案.docx

上传人:b****2 文档编号:2456039 上传时间:2022-10-29 格式:DOCX 页数:26 大小:735.63KB
下载 相关 举报
SHELL编程教案.docx_第1页
第1页 / 共26页
SHELL编程教案.docx_第2页
第2页 / 共26页
SHELL编程教案.docx_第3页
第3页 / 共26页
SHELL编程教案.docx_第4页
第4页 / 共26页
SHELL编程教案.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

SHELL编程教案.docx

《SHELL编程教案.docx》由会员分享,可在线阅读,更多相关《SHELL编程教案.docx(26页珍藏版)》请在冰豆网上搜索。

SHELL编程教案.docx

SHELL编程教案

SHELL编程

基本概念:

计算机为我们工作的是硬件,控制硬件的是计算机内核,我们使用者是利用Shell控制一些kernel提供的工具(Utility)来操控硬盘替我们正确工作。

Linux可以使用的shell:

/bin/sh(已经被/bin/bash取代)

/bin/bash(Linux预设的bash,是GNU计划中的)

/bin/ksh(Kornshell由AT&ABelllab开发的,兼容于bash)

/bin/tcsh(整合Cshell,提供更多的功能)

/bin/csh(被/bin/tcsh取代)

/bin/zsh(由ksh发展过来的,提供更多的功能)

命令补全功能:

Tab,按一次能把唯一匹配的补全,如果按两次会把所有能匹配的全部打印出来

命令取别名功能:

aliaslm='ls-al

Linux提供2种命令:

内部命令的执行速度比外部命令要快的多

shell的内部命令如:

echoshell内部本身提供的命令

shell的外部命令如:

lsshell本身不提供,但它是通过shell调用/bin/ls

在解释内部命令是shell不需要创建子进程。

而外部命令需要创建单独的新进程,从而加大了系统的开销。

外部命令就是路径搜索下可以找到的,执行会起子进程。

某些shell内部命令与系统命令具有相同的名字,但其实现方式不一样如shell内部命令echo与系统命令/bin/echo名字完全一样功能也相同如:

[root@am~]#echo"testechostring"

testechostring

[root@am~]#/bin/echo"testechostringusesystemcommand"

testechostringusesystemcommand

使用type命令,可以查看该命令是内部命令还是外部命令

-t显示意义缺省参数显示是内部还是外部

*系统命令在/bin目录下,若把/bin下的该命令文件删除后,该命令仍然好用,则为内部命令。

所有的内部命令都可以用help查看帮助说明,helpls就不可以,因为ls是外部命令。

而外部命令寻求帮助方法:

ls--help可以看一个简单的帮助

符号:

双引号""、单引号、$、反引号``、转义符\、算术运算符[]、命令结束符;、子shell激活()、逻辑运算符||&&、:

空命令、!

取反

Shell脚本shellscript

开头必须是#/bin/bash#!

后跟使用的shell的完整路径

使脚本可执行:

加上x权限

1)注释#

#echo"helloworld"

echo"helloworld"#

echo"hello#world"

echo"hello\#world"

echohello#world

Echohello\#world

2)在脚本中引用命令行传来的参数$

$0$1$2$#$*$$$@$?

$可以引用变量

hello="helloeverybody"

echo$hello

局部变量作用域被限定在当前shell中,脚本执行结束,变量不再可用。

declare可以用来定义局部变量,可以创建局部变量并为其赋值。

value=”john”

echo$value

declarename=12

echo$name

上面介绍的那些特殊变量可以理解为局部变量

全局变量称环境变量,由内置的export命令创建,当脚本结束,该全局变量超出作用域。

带-x选项的函数declare也用于设置环境变量并将其作为输出:

#!

/bin/bash

#a.sh

exportname_tmp=”jone”

echo$name_tmp

declare–xvalue_tmp1=12

declarevalue_tmp2=13

value_tmp3=14

echo$value_tmp1

echo$value_tmp2

echo$value_tmp3

./b.sh

#!

/bin/bash

#b.sh

echo$name_tmp

echo$value_tmp1

echo$value_tmp2

echo$value_tmp3

declare定义一个变量

-x-a-r-i

使用unset取消一个变量的定义

read读取用户输入的一行

readname1name2name3

echo$name1$name2$name3

向屏幕输出:

echoprintf

printf"name1is%d"$name1

let命令

用来执行整型算术运算和数值表达式测试。

i=5

leti=i+1

echo$i打印6

let"i=i+2"

echo$i打印8

let“i+=1”

echo$i打印9

i=3

((i+=4))双括号可以用来代替let命令

echo$i

条件运算

关于退出状态:

0表示成功或表达式为真;1表示失败或者表达式为假

echo#?

可输出退出状态,退出状态保存在特殊变量?

test和方括号

方括号和test用来测试表达式的值,字符串必须用引号括起来。

test.sh比较程序

name=Tom

grep"$name"/etc/passwd

echo$?

test$name==Tom

echo$?

[$name=Tom]方括号是test命令的另一种表示方法。

echo$?

[$name=[Tt]?

?

]test命令不允许通配符

echo$?

x=5

y=20

[$x-gt$y]$x是否大于$y返回0,否则返回1

echo$?

[$x-le$y]$x是否小于或等于$y,是返回0,否则返回1

echo$?

if命令

格式:

if命令

then

命令

fi

if条件判断使用test或[]

if_fi.sh

#!

/bin/bash

echo"areyouo.k(y/n)?

"

readanswer

If["$answer"=Y-o"$answer"=y]

then

echo"clabtohearit."

fi

if[[$answer==[Yy]*]]

then

echo"gladtohearit."

fi

bigfile.sh

#!

/bin/bash

if(($#!

=2))

then

echo"usage:

$0mdayssize"

exit1

fi

if(($1<0||$1>30))

then

echo"mdaysisoutofrange"

exit2

fi

if(($2<=20))

then

echo"sizeisoutofrange"

exit3

fi

测试:

./bigfile.sh参数出错

./bigfile.sh40080参数1满足条件,退出状态为2

$echo$?

打印为2

./bigfile.sh252参数2满足条件,退出状态为3

$echo$?

打印为3

if-else-fi

格式:

if命令

then

命令

else

命令

fi

if_else_fi.sh

#!

/bin/bash

name=userx

ifgrep"$name"/etc/passwd>/dev/null

#grep命令的退出状态为0,程序转向then语句

then

echofound$name

else

echo"can'tfind$name"

exit1

fi

if/elif/else命令

格式:

if命令

then

命令

elif命令

then

命令

elif命令

then

命令

else

命令

fi

tellme.sh功能:

<0或>120打印welcometoourplant

>0并<12打印achildisagardenofverses

>12并<19打印rebelwithoutacause

19到29打印yougettheworldbythetail

29到39打印thirtysomething

其余打印sorryiasked

#!

/bin/bash

echo-n"howoldareyou?

"

readage

if[$age-lt0-o$age-gt120]

then

echo"welcometoourplant"

exit1

fi

if[$age-ge0-a$age-le12]

then

echo"achildisagardenofverses"

elif[$age-gt12-a$age-le19]

then

echo"rebelwithoutacause"

elif[$age-gt19-a$age-le29]

then

echo"yougettheworldbythetaill"

elif[$age-gt29-a$age-le39]

then

echo"thirtysomething"

else

echo"sorryiasked"

fi

perm_chech.sh

功能:

file为目录打印isadirectory,file为普通文件则判断文件的属性。

#!

/bin/bash

echo"inputfilename:

"

readfile

if[-d$file]

then

echo"$fileisadirectory"

elif[-f$file]

then

if[-r$file-a-w$file-a-x$file]

then

echo"youhaveread,andexecutepermissionon$file"

fi

else

echo"$fileisneitherafilenoradirectory"

fi

case命令

case命令是一个多路分支命令。

格式:

case变量in

值1)

命令

;;

值2)

命令

;;

*)

命令

;;

esac

xcolors.sh

#!

/bin/bash

echo-n"chooseaforegroundcolor"

readcolor

case"$color"in

[Bb]l?

?

)#以B或b开头,后面跟字母l和两个任意字符

echo'blue'

;;

[Gg]ree*)

echo'green'

;;

red|orange)

echo'redorange'

;;

*)

echo'blank'

;;

esac

echo'outofcasecommand'

循环命令

for命令

格式:

for变量in词表

do

命令

done

forloop.sh

#!

/bin/bash

forpalintomdickharryjoe#循环变量为字符串

d

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

当前位置:首页 > 医药卫生 > 基础医学

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

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