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
上面就是这一讲的内容,控制流程比较多,这里先介绍这三个。
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
上面就是这一讲的内容,控制流程比较多,这里先介绍这三个。
发表评论
-
linux oracle 11g install
2015-08-13 13:47 663centos 5.10 下安装oracle 11g_r2 ... -
linux 虚拟机复制后网络无法重启device eth does not seem to be present
2014-07-06 00:28 748vmlite虚拟机启动出错,就把这个虚拟机删除掉重新建立,系 ... -
远程启图像界面登录linux
2014-07-04 15:14 822首先的配置本地yum/etc/yum.conf[Serve ... -
oracle11g redhat6
2014-07-04 15:13 2022red hat enterprise 6安装 挂载光驱 ... -
oracle11g安装Centos
2014-07-04 15:10 741linux64位系统设置/etc/hosts文件 fo ... -
linux 本地源创建redhat enterprise 6
2014-07-04 03:06 814如何解决 yum安装出现This system is no ... -
linux rpm 依赖性安装
2013-07-03 18:51 651yum --disablerepo=\* --enabler ... -
linux umask介绍
2013-03-28 12:49 606umask为权限掩码 一般和chmod配套使用 设置文件的 ... -
linux服务启动优化配置
2012-06-05 14:26 1527本机服务参考: chkconfig --level 2345 ... -
myeclipse 下载地址
2012-06-05 12:02 500下面是MyEclipse 8.5官方下载地址: 请在IE下 ... -
bash1
2012-04-22 02:38 572Bourne again shell (bash) 基 ... -
bash3
2012-04-22 02:38 693探讨 ebuild 系统 Daniel R ... -
bash2
2012-04-22 02:38 564在前一篇 bash 的介绍性 ... -
crontab
2012-04-22 02:39 843crontab命令的功能是在一定的时间间隔调度一些命令的执行。 ... -
shell8
2012-04-25 22:38 633Linux shell脚本前面的实例是说明十进制和二进制的转换 ... -
shell7
2012-04-25 22:38 663Linux shell脚本基础学习这部分如果只看前面间的理论部 ... -
shell5
2012-04-25 22:39 666Linux shell脚本基础已经被分成好几个部分了,这里对控 ... -
shell4
2012-04-25 22:39 676上一篇Linux shell脚本基础学习中我们讲了Linux ... -
shell2
2012-03-20 17:28 569Linux shell脚本基础课程前面一讲介绍的都是语法基础的 ... -
shell1
2012-03-20 17:27 602Linux shell脚本基础学习 ...
相关推荐
android 3D桌面SPB主题_SPB Shell 3D 5.0破解版
3. 别名功能:C shell提供了别名功能,用户可以通过设置别名来简化命令的输入,而B shell不具备这个功能。 4. shell编程语言:B shell的shell编程语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、...
Linux Shell编程经典著作: 第一部分SHELL |_文件安全与权限 |_使用find和xargs |_后台执行命令 |_文件名置换 |_shell输入与输出 |_命令执行顺序 第二部分文本过滤 |_正则表达式介绍 ...
3.代码完成:Java Shell提供了代码完成功能,开发者可以使用Tab键来自动完成代码。 4.错误检查:Java Shell提供了实时的错误检查功能,开发者可以实时地检查代码中的错误。 5.多语言支持:Java Shell支持多种语言,...
Shell是Unix和Linux操作系统中的命令解释器,它提供了一个用户与操作系统内核交互的界面,允许用户通过输入命令来执行系统功能。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
资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...
3. **Shell信号处理** `3.14Linux中的信号是什么?.html`和`3.19Linux Shell trap命令:捕获信号.html`、`3.20Linux Shell trap命令捕获信号实例演示.html`将介绍Linux中的信号机制,这是一种进程间通信方式,用于...
Shell脚本是一种强大的编程工具,它在Unix和Linux操作系统中广泛应用于自动化和任务调度。在Shell脚本中,创建子Shell是一种常见的操作,它可以提供一个隔离的执行环境,使得在其中执行的命令和脚本不会影响到父...
Windows Shell 编程.pdf 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用windows的外壳API做一些工作,因为外壳操作需要一些比较专业的知识,因此,大部分编程人员特别是使用集成编程环境的程序人员对...
3. **文件与目录操作**:如何创建、删除、移动、复制文件和目录,以及文件查找、权限管理等相关命令。 4. **管道与重定向**:利用管道(|)将一个命令的输出作为另一个命令的输入,重定向(>、<、>>)则可以改变...
提问: 我想要知道运行中脚本子shell的进程id。我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为...
3. 可以将 Shell 命令键入一个文件,通过执行这个文件来达到执行若干命令的目的。 4. 在不中断前台操作的情况下,可通过后台方式运行其它命令。 5. 可以把系统命令、Shell 命令进行适当的组合,构成一个新命令。 6. ...
此外,Shell并非固定不变的,用户可以根据个人需求选择不同的Shell类型,常见的Shell包括Bourne Shell (`sh`)、Bourne-Again Shell (`bash`)、C Shell (`csh`)、T C Shell (`tcsh`) 和 Korn Shell (`ksh`)等。...
3. **设置启动顺序**:进入电脑的BIOS或UEFI设置,将U盘设置为优先启动设备。这通常在“启动”或“Boot”菜单下完成,通过移动设备优先级来确定从哪个设备启动。 4. **启动计算机**:保存设置并退出,电脑将尝试从...
### Visual Studio 2013 Shell 知识点解析 #### 一、Visual Studio Shell 概述 在软件开发领域,Visual Studio Shell 是一个极为重要的工具。它由微软推出,旨在为开发者提供一个灵活且可扩展的基础平台。通过这个...
3. **流程控制**:讲解if、else、for、while等条件和循环语句的用法。 4. **函数**:如何定义和调用自定义函数,以实现代码复用。 5. **输入/输出重定向**:如何改变命令的标准输入、输出和错误输出,实现文件操作...