大纲:

1、while循环控制语句

while实战---批量添加规则用户

while实战---猜价格游戏

2、case流程控制语句和exit退出

exit实战---返回值测试

case实战---智能解压压缩包

case实战---配置nginx服务器

######################################

1、while循环控制语句

循环的意思就是让程序重复地执行某些语句;

while循环就是循环结构的一种,

当事先不知道循环该执行多少次,就要用到while循环;

理解:在判断测试为真(true)的时候,循环执行do~done之间的命令序列

直到,判断测试为假(false)时,结束循环。

1.使用while循环语句时,可以根据特定的条件反复执行一个命令,直到条件不满足为止;

2.while会出现死循环的过程,因此循环体内的命令序列内应包括修改测试条件的语句;

格式:

while [判断测试]

#判断测试 为true时,继续执行循环

#判断测试 为false时,结束循环

do

  命令序列 

  #其中必然要有改变判断测试的语句

done

流程图:

----------------------------------------------------

----------------------------------------------------

while实战---批量添加规则用户

代码:#添加用户

#删除用户

执行效果:

#添加用户

#删除用户

源码:

#########  ueseradd.sh  #########

#!/bin/bash
# Batch add rules for users
# add users ( rule user )
# while apply example
limit=20
user="student"
i=1

while [ $i -le $limit ]
do
    useradd ${user}$i &>>log/useradd.log
    if [ $? -eq 0 ]
        then
            echo "The user ${user}$i is added."
        else
            echo "The user ${user}$i is already exists."
    fi
    let i++  #change
done

#########  ueserdel.sh  #########

#!/bin/bash
# rule user delete
limit=20
user="student"
i=1

while [ $i -le $limit ]
do
    userdel -r ${user}$i &>>log/userdel.log
    if [ $? -eq 0 ]
    then echo "The user ${user}$i is deleted."
    else echo "The user ${user}$i is not exists."
    fi
    let i++
done

#################################

----------------------------------------------------

----------------------------------------------------

while实战---猜价格游戏

思路:

随机生成一个数字,作为要猜的价格

此数对1000取余,控制其价格在0-999之间

然后获取用户猜测价格后,与生成的价格比较,并给出提示信息

猜对了,输出信息,并给出猜测次数

猜错了,输出提示信息

源码如下:

#!/bin/bash
# guess the price( 0 - 1000 )

price=$(expr $RANDOM % 1000 )  # the true price
counts=0 #the guess times
while [ true ]
do
    read -p "Please enter your guess[0-999]:" num
    let counts++
    if [ $num -eq $price ]
    then
        echo "Well Done!"
        echo "the times you guess is $counts."
        exit 0  #finish the while circle
    elif [ $num -lt $price ]
    then
        echo "Wrong! Its too low."
    else
        echo "Wrong! Its too high."
    fi
done

执行结果:

######################################

2、case流程控制语句和exit退出命令

-------------------------------------

2.1 exit命令:用来控制程序和表达式流程,一般编程语言中都会有一个exit函数

在LinuxShell中,也存在

exit命令在退出时,会附带一个返回值如下:

exit 0  ---> 返回值为0

exit $status ---> 返回值为status的值

status取值范围在0-255之间,返回后,即结束脚本(即退出)

就是$?的值,可使用echo $?查看

#注:一般我们不要随意指定返回值,0-255是Linux已经设点好的固定返回情况,根据返回值,可以判断程序的执行情况。执行成功返回0即可。

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

-------------------------------------

-------------------------------------

exit实战---返回值测试

脚本源码:

#!/bin/bash
# test the value returned by exit

read -p "Enter a num:" i
if [ $i -eq 0 ]
then exit 0
elif [ $i -lt 123 ]
then exit 23
else exit 123
fi

-------------------------------------

2.2 case流程控制语句

理解:

根据变量名的值,依次与列出的变量值比较,当等于对应的值时,执行其下的命令序列后,结束case语句

#Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,

如果匹配成功,执行相匹配的命令

网络 路由器  acl 匹配即停止

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

#模式匹配:

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

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

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

格式:

 

case [变量名] in

  [变量值])

      #命令序列

   ;; #结束标志

  [变量值])

      #命令序列

    ;; #结束标志

   . . . . . .

  *)  #通配变量值

      #默认命令序列

    ;; #结束标志

esac #case结束标志

#注:有多少变量值,依处理情况而定。通配变量可写可不写,推荐写上,避免意外

流程图:

-------------------------------------

-------------------------------------

case实战---智能解压压缩包

环境创建:

执行结果:

脚本源码:

#!/bin/bash
# execute the tar

case $1 in
    *.tar.gz)
        tar zxf $1 &>>log/tar.log
        if [ $? -eq 0 ]
        then echo "$1 is untar."
        else echo "$1 untar failed."
        fi
        ;;
    *.tar.bz2)
        tar jxf $1 &>>log/tar.log
        if [ $? -eq 0 ]
        then echo "$1 is untar."
        else echo "$1 untar failed."
        fi
        ;;
    *.xz)
        tar Jxf $1 &>>log/tar.log
        if [ $? -eq 0 ]
        then echo "$1 is untar."
        else echo "$1 untar failed."
        fi
        ;;
    *)
        echo "Error file"
        ;;
esac

-------------------------------------

-------------------------------------

case实战---配置nginx服务器

安装nginx服务:

[root@xiaogan ~]# rpm -q zlib-devel
zlib-devel-1.2.7-15.el7.x86_64
[root@xiaogan ~]# rpm -q pcre-devel
pcre-devel-8.32-15.el7.x86_64
[root@xiaogan ~]#

[root@xiaogan ~]# ls
cdrom    Documents  Music                Pictures  scripts    start.logs  Templates  Videos
Desktop  Downloads  nginx-1.11.2.tar.gz  Public    shark.zip  tar.log     test
[root@xiaogan ~]# tar zxf nginx-1.11.2.tar.gz -C /usr/src/
[root@xiaogan ~]# cd /usr/src/nginx-1.11.2/
[root@xiaogan nginx-1.11.2]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@xiaogan nginx-1.11.2]# useradd -M nginx -s /sbin/nologin
[root@xiaogan nginx-1.11.2]# tail -1 /etc/passwd
nginx:x:1001:1001::/home/nginx:/sbin/nologin
[root@xiaogan nginx-1.11.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
checking for OS
+ Linux 3.10.0-327.el7.x86_64 x86_64
checking for C compiler ... found

[root@xiaogan nginx-1.11.2]# echo $?
0
[root@xiaogan nginx-1.11.2]# make -j 4

[root@xiaogan nginx-1.11.2]# echo $?
0

[root@xiaogan nginx-1.11.2]# make install

[root@xiaogan nginx-1.11.2]# echo $?
0

配置服务:

配置前:

配置后:

执行效果:

脚本源码:

#!/bin/bash
# chkconfig: - 99 20
# description: Nginx-server

nginx=/usr/local/nginx/sbin/nginx

case "$1" in
    start)
        netstat -anlpt | grep nginx
        if [ $? -eq 0 ]
        then
            echo "nginx server is already running!"
        else
            echo "nginx server begin start!"
            $nginx
        fi
        ;;
    restart)
        $nginx -s reload
        if [ $? -eq 0 ]
        then
            echo "nginx server is begin restart!"
        else
            echo "Nginx server restart failed!"
        fi
        ;;
    stop)
        $nginx -s stop
        if [ $? -eq 0 ]
        then
            echo "nginx server is stopped!"
        else
            echo "nginx server stop failed!"
        fi
        ;;
    status)
        netstat -anlpt | grep nginx
        if [ $? -eq 0 ]
        then
            echo "nginx is running!"
        else
            echo "nginx is not running!"
        fi
        ;;
    *)
        echo "Error!"
        echo "Please enter {start|restart|stop|status}"
        ;;
esac
exit 0

-------------------------------------

-------------------------------------

chkconfig命令:

chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。

使用语法:
chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]

chkconfig在没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指定了on,off或者reset,那么chkconfi 会改变指定服务的启动信息。on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。on和off开关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。

参数用法:
   --add 增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
   --del 删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
   --level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕。
      等级0表示:表示关机
      等级1表示:单用户模式
      等级2表示:无网络连接的多用户命令行模式
      等级3表示:有网络连接的多用户命令行模式
      等级4表示:不可用
      等级5表示:带图形界面的多用户模式
      等级6表示:重新启动
      需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。

    chkconfig --list [name]:显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
    chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
    chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
    chkconfig [--level levels] name:设置某一服务在指定的运行级是被启动,停止还是重置。

运行级文件:
每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用\ 跨行注释。
例如,random.init包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.

使用范例:
chkconfig --list        #列出所有的系统服务
chkconfig --add httpd        #增加httpd服务
chkconfig --del httpd        #删除httpd服务
chkconfig --level httpd 2345 on        #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态
chkconfig --list        #列出系统所有的服务启动情况
chkconfig --list mysqld        #列出mysqld服务设置情况
chkconfig --level 35 mysqld on        #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭
chkconfig mysqld on        #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级

如何增加一个服务:
1.服务脚本必须存放在/etc/ini.d/目录下;
2.chkconfig --add servicename
    在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;
3.chkconfig --level 35 mysqld on
    修改服务的默认启动等级。

1-24-case流程控制和while循环语句的使用的更多相关文章

  1. python 流程控制(for循环语句)

    1,for循环基本语法 2, for循环常用序列 3,for循环 else使用方法 1,for循环基本语法 for iterating_var in sequence: statements(s) 2 ...

  2. SSIS从理论到实战,再到应用(4)----流程控制之For循环

    原文:SSIS从理论到实战,再到应用(4)----流程控制之For循环 上期回顾: SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器 在SSIS体系中,控制流可能经常会遇到 ...

  3. SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环

    原文:SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环 上期回顾: SSIS从理论到实战,再到应用(4)----流程控制之For循环 上一期讲了For循环,Foreach循环相 ...

  4. [转帖]流程控制:for 循环

    流程控制:for 循环 http://wiki.jikexueyuan.com/project/linux-command/chap34.html need more study need more ...

  5. day04流程控制之while循环

    流程控制之while循环 1.什么是while循环 循环指的是一个重复做某件事的过程 2.为何有循环 为了让计算机能像人一样重复 做某件事 3.如何用循环 ''' # while循环的语法:while ...

  6. php总结3——基本函数、流程控制中的循环

    3.1 php基本函数(数学.日期.字符串) 数学函数:max         mixed max(number $arg1,number $arg2,……)  求一组数据中的最大值        m ...

  7. 流程控制之while循环for循环

    流程控制之while循环1.什么是循环 循环就是重复做某件事2.为什么要有循环 为了让计算机能够具备人重复做某件事的能力3.如何用循环 while语法: while 条件: code1 code2 c ...

  8. 流程控制之 for 循环

    目录 流程控制之for循环 for 循环条件语句 for 循环的嵌套 流程控制之for循环 for 循环条件语句 for i in range(3): print(i) # 0 # 1 # 2 for ...

  9. python小白——进阶之路——day4天-———流程控制while if循环

    # ### 代码块: 以冒号作为开始,用缩进来划分作用域,这个整体叫做代码块 if 5 == 5: print(1) print(2) # 注意点: 要么全部使用4个空格,要么全部使用1个缩进 ,这样 ...

随机推荐

  1. Code signing is required for product type 'Application' in SDK 'iOS 11.2'

    在打包的时候出现这样一个错误,Code signing is required for product type 'Application' in SDK 'iOS 11.2'  ,就是说代码签名证书 ...

  2. Way to tmux

    1. tmux ls: 显示所有会话(OR: Ctrl-b s)2. tmux new -s session-name: 新建会话3. 可以简单地输入tmux a命令,这样可以接入第一个可用的会话:t ...

  3. Python(面向对象5——高级)

    面向对象进阶 一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Fo ...

  4. Linux优雅退出问题

    问题:Springboot框架开发的项目中会内嵌tomcat容器,在杀死进程的时候tomcat为被正常杀死,导致端口未被释放,第二次启动的时候报端口冲突. 先讲一个基本概念:如何在shell中终止一个 ...

  5. 简单说说spring的事务机制,以及是如何管理的?

    事务管理可以帮助我们保证数据的一致性,对应企业的实际应用很重要. Spring的事务机制包括声明式事务和编程式事务. 编程式事务管理:Spring推荐使用TransactionTemplate,实际开 ...

  6. 20145316 《Java程序设计》 课程总结

    ###20145316许心远<Java学习笔记(第8版)>课程总结 ##每周读书笔记链接汇总 ▪    [第一周读书笔记](http://www.cnblogs.com/xxy745214 ...

  7. linux下多线程之pthread_detach(pthread_self())

    写个碰到的问题,记录下自己的技术之路点滴pthread_detach(pthread_self())linux线程执行和windows不同,pthread有两种状态joinable状态和unjoina ...

  8. 【虚拟机】linux 桥接模式 固定静态IP

    1:在root用户下修改 2:进入root用户下 vim/etc/sysconfig/network-scripts/ifcfg-eth0 2.修改完保存退出 3.重启网络服务:service net ...

  9. Swoole学习(七)Swoole之异步TCP服务器的创建

    环境:Centos6.4,PHP环境:PHP7 <?php //创建TCP服务器 /** * $host 是swoole需要监听的ip,如果要监听本地,不对外服务,那么就是127.0.0.1;如 ...

  10. FWT快速沃尔什变换

    前言 学多项式怎么能错过\(FWT\)呢,然而这真是个毒瘤的东西,蒟蒻就只会背公式了\(\%>\_<\%\) 或卷积 \[\begin{aligned}\\ tf(A) = (tf(A_0 ...