shell脚本(四)case流程控制和exit命令

exit命令

exit用来控制程序和表达式的流程,一般的编程语言中都会有一个exit函数,在Linuxshell中也属存在的.

exit 0

exit status

status 用0-255之间的数字表示,返回状态值的同时伴随着脚本的退出(其实就是退出).

就是$? 的值可以使用echo 进行查询

exit命令 在脚本中和在终端上是不一样的.

实验1-判断从键盘输入的值是否为空


1,进入一个子shell,编辑一个文件.(预防执行exit的时候退出终端,所以先执行一个子shell)

[[email protected] ~]# bash
[[email protected] ~]# vim exit.sh

#!/bin/bash
echo "please enter a string :"
? read str1
if [ -z $str1 ]
then
???? echo "what you enter is null"
?? exit 1
fi

验证脚本

我们先输入一个值,可以看到我的退出状态为0 (脚本的变量值输入不为空),不会执行then中的语句

输入一个空的字符串 则执行then后面的命令 同时退出 状态为1

继续验证:

将exit.sh脚本中的值改成255

在编写脚本时可以自己设置退出的状态值,不过特定的值都是有特定的意义的,不要乱用.


case语句结构

case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

case语句主要适用于,某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列

case分支语句的语法结构

case 变量名 in

???????? 模式1)

???????????????????? 命令序列

????????? 模式二)

???????????????????? 命令序列

;;

????????????? ……

???????????????? *

?????????????????? 默认命令序列

exit

esac

注意事项:

取值后面必须为单词?? in;

每一模式必须以右括号结束。

取值可以为变量或常数。

这个esac 就是case的结束,像if...fi 一样的,
注意commands? ;; 中的“;;”不能少掉。

匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。

如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

实验

编写一个名为untar.sh的脚本,用来解压.tar.gz 和 .tar.bz2格式的归档文件

vim untar.sh

case $1 in
????? *.tar.gz)
????????????? tar zxf $1
;;
????? *.tar.bz2)
????????????? tar jxf $1
;;
????? *)
???????? echo "error"
;;
esac

测试:

创建一个测试的.tar.gz文件

原文地址:http://blog.51cto.com/rescue/2121178

时间: 2024-10-15 08:56:00

shell脚本(四)case流程控制和exit命令的相关文章

SHELL中的case流程控制

case流控制: case结构用于多种情况的条件判断.类似于其他编程语言中的switch/case语句,但从语法形式上讲,有很大的不同. case 字符串 in 模式) 语句 ;; 模式2 | 模式3) 语句 ;; *) 默认执行的 语句 ;; esac 提示:esac就是case反过来写. break和continue break命令允许跳出循环.break通常在进行一些处理后退出循环或case语句.如果是在一 个嵌入循环里,可以指定跳出的循环个数.例如如果在两层循环内,用break 2刚好跳

Shell脚本的基本流程控制

if else read -p '请输入分数:' score if [ $score -lt 60 ]; then echo '60分以下' elif  [ $score -lt 70 ]; then echo '60-70分之间' elif  [ $score -lt 80 ]; then echo '70-80分之间' elif [ $score -lt 90 ]; then echo '80-90分之间' else  echo '90分以上' fi case read -p '请输入数字'

Welcome to Swift (苹果官方Swift文档初译与注解二十七)---189~198页(第四章-- 流程控制)

Switch 一个switch语句里包含一个值,并且用这个值与其他几个可能的匹配模式进行比较,然后根据成功匹配上的模式,执行相应的代码块.switch语句提供了比if语句更多的选项来相应多种潜 在的情况. 最简单的一个例子: switch some value to consider { case value 1:   respond to value 1 case value 2, value 3:   respond to value 2 or 3 default:   otherwise,

Welcome to Swift (苹果官方Swift文档初译与注解二十八)---199~208页(第四章-- 流程控制)

Value Bindings (绑定值) 在switch的case中可以绑定一个或者多个值给case体中的临时常量或者变量,这个成为绑定值. 代码样例: let anotherPoint = (2, 0) switch anotherPoint { case (let x, 0):   println("on the x-axis with an x value of \(x)") case (0, let y):   println("on the y-axis with

Welcome to Swift (苹果官方Swift文档初译与注解二十九)---209~218页(第四章-- 流程控制)

Break break语句会立刻结束整个流程控制的执行.break语句可以在switch语句或者循环语句中帮助你提前结束循环或者switch的执行. Break in a Loop Statement  (循环语句中的break) 当在循环语句中使用break,会立刻结束循环的执行,并且跳转到循环体之后的第一行代码.循环不会再遍历执行了. Break in a Switch Statement (switch语句的break) 当在switch语句中使用break,break会立刻结速switc

Welcome to Swift (苹果官方Swift文档初译与注解二十四)---163~170页(第三章完--第四章 流程控制)

Mutability of Collections (可变集合) 字典和数组都是在一个集合里储存多个值.如果你创建数组或字典后赋值给一个变量,那么这个集合就是可变的( mutable).这就意味着你在创建这个集合之后,依然可以改变这个集合的 大小,添加元素到集合里或者删除已有的元素.相反地,如果你创建的数组或者字典赋值给一个常量,那么这个集合就是不能修改的,也就是说字典或者数组是不可变的(immutable) 对于字典,不可变就意味着你不能替换里面已有的键值对,一个不可变的字典在它一创建出来就是

Welcome to Swift (苹果官方Swift文档初译与注解三十)---219~224页(第四章-- 流程控制 完)

Labeled Statements  (标签语句) 循环或者switch语句可以嵌套其他的循环或者switch,这样在Swift中可以创建复杂的流程控制结构.循环或者switch语句都可以通过break语句来永久的结束,因此,有时候需要显式的 表明在循环或者switch中你需要break的语句.同样的,如果你嵌套多个循环,显式的表明里面的continue语句也是类似的. 为了达成这个目标,可以在循环语句或者switch语句中使用一个语句标签(statement label),利用这个标签和br

Welcome to Swift (苹果官方Swift文档初译与注解二十六)---181~188页(第四章-- 流程控制)

Do-While  while循环的另一个版本是do-while循环,它在判断条件之前,先执行一遍循环体,然后再次执行循环体,直到条件成为false. do-while循环的通过格式: do {   statements } while condition 我们再用蛇和梯子的例子,使用do-while循环代替while循环.其中 finalSquare, board, square, 和 diceRoll 的初始化与while循环是一样的: let finalSquare = 25 var bo

shell脚本中case的用法

shell脚本中case选择语句可以结合read指令实现比较好的交互应答操作,case接收到read指令传入的一个或多个参数,然后case根据参数做选择操作. case的语法如下 case $char in C | c ) command 1 ;; #每一个选择都以双 ;; 结束 M | m ) command 2 ;; * ) # * 未匹配到相符的其他值 echo "error" ;; esac #case的结束语句是以esac 结束 下面结合一个简单的小功能使用,脚本中同时也用到