`

shell3

 
阅读更多
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

上面就是这一讲的内容,控制流程比较多,这里先介绍这三个。

分享到:
评论

相关推荐

    SPB主题_SPB Shell 3D 5.0破解版

    android 3D桌面SPB主题_SPB Shell 3D 5.0破解版

    B shell与 C shell的区别

    3. 别名功能:C shell提供了别名功能,用户可以通过设置别名来简化命令的输入,而B shell不具备这个功能。 4. shell编程语言:B shell的shell编程语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、...

    Linux Shell编程3/3

    Linux Shell编程经典著作: 第一部分SHELL |_文件安全与权限 |_使用find和xargs |_后台执行命令 |_文件名置换 |_shell输入与输出 |_命令执行顺序 第二部分文本过滤 |_正则表达式介绍 ...

    JDK13-java-shell-user-guide.pdf

    3.代码完成:Java Shell提供了代码完成功能,开发者可以使用Tab键来自动完成代码。 4.错误检查:Java Shell提供了实时的错误检查功能,开发者可以实时地检查代码中的错误。 5.多语言支持:Java Shell支持多种语言,...

    Shell源码(Shell源码)

    Shell是Unix和Linux操作系统中的命令解释器,它提供了一个用户与操作系统内核交互的界面,允许用户通过输入命令来执行系统功能。Shell不仅是一个命令行接口,还是一个强大的编程语言,用户可以编写脚本来自动化一...

    Shell编程中文手册.pdf

    本手册涵盖了 Shell 编程的基础知识,包括 Shell 概述、Shell 解析器、Shell 脚本入门、Shell 中的变量等。 Shell 概述 Shell 是一种命令行接口,允许用户与操作系统进行交互。学习 Shell 编程可以让开发者更好地...

    shell 彩色文字输出

    log $BG_GREEN $FG_RED "this is a test" log_info "this is a info" log_error "this is a error" log_debug "this is a debug" log_warn "warn this is a warn

    LinuxShell脚本学习基础视频

    资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...

    C语言中文网shell脚本教程

    3. **Shell信号处理** `3.14Linux中的信号是什么?.html`和`3.19Linux Shell trap命令:捕获信号.html`、`3.20Linux Shell trap命令捕获信号实例演示.html`将介绍Linux中的信号机制,这是一种进程间通信方式,用于...

    shell变量与创建子shell详解

    Shell脚本是一种强大的编程工具,它在Unix和Linux操作系统中广泛应用于自动化和任务调度。在Shell脚本中,创建子Shell是一种常见的操作,它可以提供一个隔离的执行环境,使得在其中执行的命令和脚本不会影响到父...

    Windows Shell 编程.pdf

    Windows Shell 编程.pdf 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用windows的外壳API做一些工作,因为外壳操作需要一些比较专业的知识,因此,大部分编程人员特别是使用集成编程环境的程序人员对...

    linux_shell实例精解

    3. **文件与目录操作**:如何创建、删除、移动、复制文件和目录,以及文件查找、权限管理等相关命令。 4. **管道与重定向**:利用管道(|)将一个命令的输出作为另一个命令的输入,重定向(>、<、>>)则可以改变...

    Shell脚本中获取进程ID的方法

    提问: 我想要知道运行中脚本子shell的进程id。我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为...

    shell教程shell脚本编写方

    3. 可以将 Shell 命令键入一个文件,通过执行这个文件来达到执行若干命令的目的。 4. 在不中断前台操作的情况下,可通过后台方式运行其它命令。 5. 可以把系统命令、Shell 命令进行适当的组合,构成一个新命令。 6. ...

    SHELL十三问,PDF

    此外,Shell并非固定不变的,用户可以根据个人需求选择不同的Shell类型,常见的Shell包括Bourne Shell (`sh`)、Bourne-Again Shell (`bash`)、C Shell (`csh`)、T C Shell (`tcsh`) 和 Korn Shell (`ksh`)等。...

    shell.efi 启动

    3. **设置启动顺序**:进入电脑的BIOS或UEFI设置,将U盘设置为优先启动设备。这通常在“启动”或“Boot”菜单下完成,通过移动设备优先级来确定从哪个设备启动。 4. **启动计算机**:保存设置并退出,电脑将尝试从...

    Visual Studio 2013 Shell 下载

    ### Visual Studio 2013 Shell 知识点解析 #### 一、Visual Studio Shell 概述 在软件开发领域,Visual Studio Shell 是一个极为重要的工具。它由微软推出,旨在为开发者提供一个灵活且可扩展的基础平台。通过这个...

    shell编程入门经典--LINUX与UNIX Shell编程指南 (中文pdf版)

    3. **流程控制**:讲解if、else、for、while等条件和循环语句的用法。 4. **函数**:如何定义和调用自定义函数,以实现代码复用。 5. **输入/输出重定向**:如何改变命令的标准输入、输出和错误输出,实现文件操作...

Global site tag (gtag.js) - Google Analytics