威尼斯wns.9778官网活动_vnsc威尼斯城官网

热门关键词: 威尼斯wns.9778官网活动,vnsc威尼斯城官网
当前位置:威尼斯wns.9778官网活动 > 计算机教程 > Shell编程之case语句实战(威尼斯wns.9778官网活动小

Shell编程之case语句实战(威尼斯wns.9778官网活动小

文章作者:计算机教程 上传时间:2019-05-10

大家好,今天给大家带来的是Shell编程之case语句的使用!

对于if语句,其实很多人都肯定的听说过,那么if语句到底是什么,简单的说,就类似于汉语里面的如果----那么,if语句是linux运维人员在实际环境中使用的最频繁也是最重要的语句!!!

其实case语句还是很好理解的,在shell编程中,if语句有它的语法,函数也有它的语法,那么在我们shell编程中的case语句也是有它的语法的,如下:

一、if条件语句

case 变量名 in 
  值1) 
   指令1 
  ;; 
  值2) 
   指令2 
  ;; 
  值3) 
   指令3 
  ;; 
esac 

1、单分支语句结构

在以上的代码中我们发现,以case开头,以esac结尾,就像我们的if语句,以if开头以fi结束时一样的。

第一种语法如下:

例2:

if <条件表达式> 
 then 
 指令 
fi 
case "找老公条件" in 
   家里有房子) 
    嫁给你... 
  ;; 
   家庭有背景) 
    嫁给你... 
  ;; 
   很努力吃苦) 
    那么我们可以先谈男女朋友.. 
  ;; 
esac 

第二种语法

好了接下来我们实践,其实语法就是上面的一些基本语法,那么我么在实践中来体会case到底有什么用

if <条件表达式>; then 
 指令 
fi 

其实自我认为case语句更适合一些菜单选项的脚本,那么我们先用if语句写一个菜单脚本如下:

在以上这两种方式中我还是喜欢用第一种,这个是看个人习惯的。在上面的两个语法中<条件表达式>可以是 test [] [[]] (())等条件表达式,甚至可以使用命令作为条件表达式。注意:每个if语句都是以if开头 fi结束,中间并带有then;

#!/bin/bash 
#!/bin/bash 
# Date: 4:42 2018-2-5 
# Mail: ywyankerp@163.com 
# Founder: <YanKai> 
# Describe: This is a one - button installation service script  
function CDAN(){ 
cat << yankerp  
1.米饭 
2.面条 
3.包子 
yankerp 
} 
CDAN 
read -p 请您输入您今天要吃什么: NUM 
expr $NUM   1 &>/dev/null 
if [ "$?" -ne 0 ] 
 then 
  echo "请您输入{1|2|3}"  
  exit 1 
fi 

if [ "$NUM" -eq 1 ] 
  then 
   echo "小二,来一碗米饭" 
elif [ $NUM -eq 2 ] 
  then 
   echo "小二,来一碗面条" 
elif [ "$NUM" -eq 3 ] 
  then 
   echo "小二,来一锅包子" 
fi 

其实很简单,举个例子如下:

威尼斯wns.9778官网活动 1

if [ -f file ] 
 then 
 echo "是一个普通文件" 
 else 
 echo "不是一个普通文件" 
 exit 1 
fi 

首先我们看到我们上面的if语句,是不是感觉有点繁琐,那么接下来我们使用case语句来实现 如下:

剖析:如果file是一个普通文件,那么就执行echo "是一个普通文件"  否则 输出一条"不是一个普通文件" 最后退出脚本

#!/bin/bash 
#!/bin/bash 
# Date: 4:42 2018-2-5 
# Mail: ywyankerp@163.com 
# Founder: <YanKai> 
# Describe: This is a one - button installation service script  
function CDAN(){ 
cat << yankerp  
1.米饭 
2.面条 
3.包子 
yankerp 
} 
CDAN 
read -p 请您输入您今天要吃什么: NUM 
expr $NUM   1 &>/dev/null 
if [ "$?" -ne 0 ] 
 then 
  echo "请您输入{1|2|3}"  
  exit 1 
fi 

case $NUM in 
    1) 
     echo "小二,来一碗米饭" 
    ;; 
    2) 
     echo "小二,来一碗面条" 
    ;; 
    3) 
     echo "小二,来一锅包子" 
    ;; 
esac 

其实以下的这段命令更能清晰的了解if语句如下:

威尼斯wns.9778官网活动 2

如果 <你不会if语句> 
 那么 
 那肯定长的不帅 
果如 

剖析时刻:

2、以上就是单分支的if语句,接下来看看双分支的if语法结构

#!/bin/bash 
#!/bin/bash 
# Date: 4:42 2018-2-5 
# Mail: ywyankerp@163.com 
# Founder: <YanKai> 
# Describe: This is a one - button installation service script  
function CDAN(){  #定义一个CDAN的函数 
cat << yankerp    
1.米饭 
2.面条 
3.包子 
yankerp 
} 
CDAN       #调用CDAN函数 
read -p 请您输入您今天要吃什么: NUM  #输入一条提示,然后把用户输入的字符串赋值给变量NUM 
expr $NUM   1 &>/dev/null     # 使用数值运算命令expr来确定用户输入的是否是数值 
if [ "$?" -ne 0 ]         #如果用户输入的不是数值 
 then      #那么 
  echo "请您输入{1|2|3}"   #打印出 1 2 3  
  exit 1       #最后退出脚本 
fi        #结束if语句 

case $NUM in    #这里就是我们的case语句了,简单理解,在NUM这个变量中 
    1)       #如果用户输入的是1 
     echo "小二,来一碗米饭"    #那么就输出一行来一碗米饭 
    ;; 
    2)             #如果在NUM变量中用户输入的是2 
     echo "小二,来一碗面条"  #那么继续打印此内容 
    ;; 
    3)              #以此类推 
     echo "小二,来一锅包子" 
    ;; 
esac       #最后使用esac结束 
if <条件表达式> 
 then 
 指令一 
 else 
 指令二 
fi 

觉得不够养眼?没有关系如下图:

以上就是单分支的if语句结构,那么在举个例子如下:

威尼斯wns.9778官网活动 3

if [ -f file ] 
 then 
 echo "这是一个普通文件" 
 else 
 echo "NONONO" 
fi 

我们发现,在多个选项的这些脚本中呢,还是使用case语句是比较方便合适的。

这个和以上的例子是一样的。同样是测试file是不是一个普通文件,如果是,那么就输出指令1 否则那么就输出指令2

那么我们掌握了基本的语法和它的一些功能,那么我们可以结合函数 case语句来完成一个菜单式的安装脚本如下:

到这里我们在来一个形象描述

#!/bin/bash 
# Date: 4:42 2018-2-5 
# Mail: ywyankerp@163.com 
# Founder: <YanKai> 
# Describe: This is a one - button installation service script  
function CDAN(){ 
cat << yankerp  
 ------------------------------------------------  
|                        | 
|    _o0o_     1. 安装Nginx       | 
|    08880     2. 安装Apache      | 
|    88"."88     3. 安装MySQL       | 
|    (|-_-|)     4. 安装PHP        | 
|    0=/0     5. 部署LNMP环境     | 
|   __/  __    6. 安装zabbix监控    | 
|   ‘  ///‘     7. 退出此管理程序    | 
|  / Linux一键    8. 关闭计算机      | 
| ||  Server  ||  ======================  |  
|     ////     一键安装服务      | 
|  ||| i i i  |||        by Yankerp  | 
|  ___    ___   ======================  | 
|___‘. /--.-- .‘___              | 
 ------------------------------------------------  
yankerp 
} 
CDAN 
. /etc/init.d/functions 
BASE_DIR=/usr/local/src 
read -p "请您输入1-8任意字符:" NUM 
expr $NUM   1 &>/dev/null 
if [ "$?" -ne 0 ] 
 then 
  echo "请您输入{1|2|3|4|5|6|7|8}" 
  exit 1 
fi 

function Nginx_server (){ 
  echo "开始安装Nginx请稍后...." 
  yum install -y gcc gcc-c   pcre-devel zlib-devel openssl-devel &>/dev/null 
  cd $BASE_DIR && wget http://nginx.org/download/nginx-1.12.2.tar.gz &>/dev/null && useradd -M -s /sbin/nologin nginx &&  
tar zxf nginx-1.12.2.tar.gz && cd $BASE_DIR/nginx-1.12.2/ &&   
  ./configure --prefix=/usr/local/nginx --with-http_dav_module--with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module--with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx &>/dev/null 
  if [ "$?" -eq 0 ] 
   then 
    make && make install &>/dev/null 
  fi 
if [ -f /usr/local/nginx/sbin/nginx ];then 
  ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin && nginx && echo "Nginx安装成功!" 
fi 
} 

function Apache_server (){ 
  echo "开始安装Apache请稍后" 
  yum install httpd -y &>/dev/null 
  if [ "$?" -eq 0 ] 
   then  
    echo "Apache安装成功!" 
   else 
    echo "Apache安装失败!" 
  fi 
} 

case $NUM in 
  1) 
   Nginx_server 
  ;; 
  2) 
   Apache_server 
  ;; 
esac 
如果 <你不会if语句> 
 那么 
  就快点学,快点练 
 否则 
  你永远都不可能学会 
果如 

运行结果如下:

我们发现 单分支和双分支的区别就在于一个有else 一个没有。

威尼斯wns.9778官网活动 4

3、多分支if语句结构

以上脚本大家可以参考参考,很简单实现,那么接下来在来一个案例

我们在上面说了 单分支和双分支 这里又有了一个多分支,我们可以理解为双分支里面包含了单分支,那么多分支里面肯定包含了单分支 双分支:个人理解,好像有点绕? 先来看看多分支吧 如下:

实战2:编程Nginx启动脚本

if 语句多分支结构主体为:如果.....那么....否则如果.....那么.....否则如果.....那么,,,,

编译安装的Nginx是没有启动脚本的,这时候我们可以选择自己写一个,在这里我用我的思路给大家解释整个过程虽然不是很规范,希望还是能够帮助到你如下:

例1:

#!/bin/bash 
BASE_DIR=/usr/local/nginx/sbin/ 
PID=/usr/local/nginx/logs/nginx.pid 
#no1.判断是否root用户登录 
if [ "$UID" -ne 0 ] 
 then 
  echo "请您使用root用户登录!!!" 
 exit 1 
fi 
. /etc/init.d/functions  
#判断用户输入的传参个数 
if [ "$#" -ne 1 ] 
  then 
    echo "/bin/bash $0 {start|stop|restart}" 
  exit 1 
fi 

#编写启动Nginx函数 
function start (){ 
  if [ `netstat -anput | grep nginx | wc -l` -eq 0 ] 
    then 
     $BASE_DIR/nginx 
  fi 
    if [ "$?" -eq 0 ] 
     then 
      action "Nginx启动成功!" /bin/true 
     else 
      action "Nginx启动失败!" /bin/false 
    fi 
} 

#编写停止Nginx函数 
function stop (){ 
  if [ `netstat -anput | grep nginx | wc -l` -ne 0 ] 
    then 
     $BASE_DIR/nginx -s stop 
  fi 
    if [ "$?" -eq 0 ] 
     then 
      action "Nginx停止成功!" /bin/true 
     else 
      action "Nginx停止失败!" /bin/false 
    fi 
} 

#编写case语句 使用特殊的位置变量$1来判断用户输入的内容 
case $1 in 
  start) 
     start 
  ;; 
  stop) 
     stop 
  ;; 
    restart) 
     stop 
     start 
  ;; 
esac 
if [ -f file ] 
 then 
 echo "yes yes yes" 
elif [ -z file ] 
 then 
 echo "yes yes" 
else 
 echo "nonono" 
fi 

运行如下:

解释如下图:

威尼斯wns.9778官网活动 5

威尼斯wns.9778官网活动 6

一张图更清晰解释

看完图还是没理解? 没有关系 如下:

威尼斯wns.9778官网活动 7

威尼斯wns.9778官网活动 8

威尼斯wns.9778官网活动 9

到这里应该是没有问题了~~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

单分支if条件语句实践

您可能感兴趣的文章:

把下面的测试文件中条件表达式改为if条件语句

[root@shell-yankerp sh]# [ -f file ] && echo "yes" || echo "no" 
yes 

修改如下:

if [ -f file ] 
 then 
 echo "yes" 
 else 
 echo "no" 
fi 

运行结果如下:

[root@shell-yankerp sh]# [ -f file ] && echo "yes" || echo "no" 
yes 
[root@shell-yankerp sh]# sh cs.sh 
yes 
[root@shell-yankerp sh]# cat cs.sh 
#!/bin/bash 
# Maintenance:<ywyankerp@163.com> 
# BINLOG:www.ywyankai.cn 
# DATE:03:31:35 CST, Sunday, 02 month, 2018, 04 
# Test scripts 

if [ -f file ] 
 then 
 echo "yes" 
 else 
 echo "no" 
fi 
[root@shell-yankerp sh]#

到这里if的一些基本语法应该掌握了,那么我们接下来,来点实际的。

实战1:开发shell脚本检测Nginx服务是否正常启动 如果宕机,那么就设置邮箱报警!!!

其实此章有很多的案例,但是还是那句话,我还是想用我的思想来编写整个脚本,这样能表达出来我的整个过程!

首先我们要知道为什么要写这个脚本?,我们的目的是要干什么?最后需要实现什么样的效果?,写了这个脚本到底能实现什么样的功能? 我感觉这个是我们首先需要考虑的问题。随后我们就可以带着这些问题,去编写我们的shell脚本

那么我们可以根据以上的需求分为三块 如:如何查看Nginx服务是否启动?  我们如何查看Nginx服务宕机时候的一些情况。 最后我们需要知道我们用什么样的工具来实现这个邮箱报警。

1、如何查看Nginx启动?

本文由威尼斯wns.9778官网活动发布于计算机教程,转载请注明出处:Shell编程之case语句实战(威尼斯wns.9778官网活动小

关键词: