sfyhip 发表于 2018-8-22 11:38:17

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

  exit命令
  exit用来控制程序和表达式的流程,一般的编程语言中都会有一个exit函数,在Linuxshell中也属存在的.
  exit 0
  exit status
  status 用0-255之间的数字表示,返回状态值的同时伴随着脚本的退出(其实就是退出).
  就是$? 的值可以使用echo 进行查询
  exit命令 在脚本中和在终端上是不一样的.
  实验1-判断从键盘输入的值是否为空
  
  1,进入一个子shell,编辑一个文件.(预防执行exit的时候退出终端,所以先执行一个子shell)
  # bash
  # 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文件




页: [1]
查看完整版本: shell脚本(四)case流程控制和exit命令