快速业务通道

详细介绍Linux shell脚本基础学习(三)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-01
Linux shell脚本基础学习第三讲,前面我们介绍shell命令和流程控制时,篇幅没能讲流程控制,今天流程控制我们这里也只是介绍前面三各部分 if case 和 select.后面还有三个部分内容只能在Linux shell脚本基础学习第四讲中介绍了.

1.1.5 Shell命令和流程控制(2)

3) 流程控制

1.if

"if" 表达式 如果条件为真则执行then后面的部分:

if ....; then

....

elif ....; then

....

else

....

fi

大多数情况下,可以使用测试命令来对条件进行测试.比如可以比较字符串、判断文件是否存在及是否可读等等…

通常用" [ ] "来表示条件测试.注意这里的空格很重要.要确保方括号的空格.

[ -f "somefile" ] :判断是否是一个文件

[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限

[ -n "$var" ] :判断$var变量是否有值

[ "$a" = "$b" ] :判断$a和$b是否相等

执行man test可以查看所有测试表达式可以比较和判断的类型.

直接执行以下脚本:

#!/bin/sh

if [ "$SHELL" = "/bin/bash" ]; then

echo "your login shell is the bash (bourne again shell)"

else

echo "your login shell is not bash but $SHELL"

fi

变量$SHELL包含了登录shell的名称,我们和/bin/bash进行了比较.

快捷操作符

熟悉C语言的朋友可能会很喜欢下面的表达式:

[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"

这里 && 就是一个快捷操作符,如果左边的表达式为真则执行右边的语句.

您也可以认为是逻辑运算中的与操作.上例中表示如果/etc/shadow文件存在则打印” This computer uses shadow passwors”.同样或操作(||)在shell编程中也是可用的.这里有个例子:

#!/bin/sh

mailfolder=/var/spool/mail/james

[ -r "$mailfolder" ]'' ''{ echo "Can not read $mailfolder" ; exit 1; }

echo "$mailfolder has mail from:"

grep "^From " $mailfolder

该脚本判断mailfolder是否可读.如果可读则打印该文件中的"From" 一行.如果不可读则或操作生效,打印错误信息后脚本退出.这里有个问题,那就是我们有两个命令:

-打印错误信息

-退出程序

我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用.一般函数将在下文提及.

不用与和或操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多.

2.case

case :表达式可以用来匹配一个给定的字符串,而不是数字.

case ... in

...) do something here ;;

esac

让我们看一个例子. file命令可以辨别出一个给定文件的文件类型,比如:

file lf.gz

这将返回:

lf.gz: gzip compressed data, deflated, original filename,

last modified: Mon Aug 27 23:09:18 2001, os: Unix

我们利用这一点写了一个叫做smartzip的脚本,该脚本可以自动解压bzip2, gzip 和zip 类型的压缩文件:

#!/bin/sh

ftype=`file "$1"`

case "$ftype" in

"$1: Zip archive"*)

unzip "$1" ;;

"$1: gzip compressed"*)

gunzip "$1" ;;

"$1: bzip2 compressed"*)

bunzip2 "$1" ;;

*) echo "File $1 can not be uncompressed with smartzip";;

esac

您可能注意到我们在这里使用了一个特殊的变量$1.该变量包含了传递给该程序的第一个参数值.

也就是说,当我们运行:

smartzip articles.zip

$1 就是字符串 articles.zip

3. selsect

select 表达式是一种bash的扩展应用,尤其擅长于交互式使用.用户可以从一组不同的值中进行选择.

select var in ... ; do

break

done

.... now $var can be used ....

下面是一个例子:

#!/bin/sh

echo "What is your favourite OS?"

select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do

break

done

echo "You have selected $var"

下面是该脚本运行的结果:

What is your favourite OS?

1) Linux

2) Gnu Hurd

3) Free BSD

4) Other

#? 1

You have selected Linux

上面就是这一

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号