for、while、until循环

一、for循环

         for 变量名 in 列表;do

            循环体

          done

         执行机制:

            依次将列表中的元素赋值给“变量名” ; 每次赋值后即执

            行一次循环体; 直到列表中的元素耗尽,循环结束

         列表生成方式:

            (1) 直接给出列表

            (2) 整数列表

            (a) {start..end}

            (b) $(seq [start [step]] end)

            (3) 返回列表的命令

            $(COMMAND)

            (4) 使用glob, 如: *.sh

            (5) 变量引用;

            $@, $*

二、while循环

         while CONDITION; do

            循环体

         done

       

          CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之

            后会再次做判断;条件为“ true”,则执行一次循环;直到条件测试

            状态为“ false”终止循环

         因此: CONDTION一般应该有循环控制变量;而此变量的值

                会在循环体不断地被修正

       

          进入条件: CONDITION为true;

         退出条件: CONDITION为false

三、until循环

         until CONDITION; do

            循环体

         done

         进入条件: CONDITION 为false

         退出条件: CONDITION 为true

四、循环控制语句continue

         用于循环体中

         continue [N]:提前结束第N层的本轮循环,而直接进入下一

                 轮判断;最内层为第1层

        

        while CONDTIITON1; do

            CMD1

            …

        if CONDITION2 ;then

            continue

        fi

            CMDn

            …

        done

五、循环控制语句break

         用于循环体中

         break [N]:提前结束第N层循环, 最内层为第1层

         while CONDTIITON1; do

              CMD1

              …

         if CONDITION2; then

             break

         fi

            CMDn

            …

          done

作业:

       

1、使用循环语句,写个脚本实现:

    *

   ***

  *******

 *********

#!/bin/bash

#

read -p "input line number:" line

declare -i n=1

declare -i lie=1

while [ $n -le "$line" ];do

            kong_number=$[$line-$n]

            xing_number=$[1+2*($n-1)]

            xing_start=$[$line-$n+1]

            xing_end=$[$kong_number+$xing_number]

            sum_lie=$[2*$kong_number+$xing_number]

            declare -i lie=1

        while [ "$lie" -le "$sum_lie" ];do

            if [ "$lie" -ge "$xing_start" ] && [ "$lie" -le "$xing_end" ];then

                echo -ne "\033[41m*\033[0m"

            else

                echo -ne "\033[31;45m \033[0m"

            fi

            let lie++

        done

        let n++

        echo

done

~     

chess.JPG

2、用until循环实现国际象棋棋盘

 

#!/bin/bash

#print the chessboard 

declare -i H=1

declare -i S=1

white="\033[1;41m \033[0m"

black="\033[1;47m \033[0m"

until [ $S -eq 9 ];do

    Syu=$[$S%2]

    if [ "$Syu" -eq 1 ]; then

        while [ $H -le 8 ];do

               yu=$[$H%2]

            [ $yu -eq 0 ] && echo -ne "$white" || echo -ne "$black"

        let H++

        done

    else

             until [ $H -eq 9 ];do

                yu=$[$H%2]

            [ $yu -eq 0 ] && echo -ne "$black" || echo -ne "$white"

            let H++

        done

    fi

    declare -i H=1

    let S++

    echo

done

cheeeee.JPG

8-19  作业:

1、1、编写服务脚本/root/bin/testsrv.sh,完成如下要求

(1) 脚本可接受参数:start, stop, restart, status

(2) 如果参数非此四者之一,提示使用格式后报错退出

(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功”

考虑:如果事先已经启动过一次,该如何处理?

(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成”

考虑:如果事先已然停止过了,该如何处理?

(5) 如是restart,则先stop, 再start

考虑:如果本来没有start,如何处理?

(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAMEis running…”

如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped…”

其中:SCRIPT_NAME为当前脚本名

  1 #!/bin/bash

  2 #

  3 PS3="input your chioce:"

  4 select menu in start stop restart status

  5     do

  6         case $REPLY in

  7             start)

  8                     find /var/lock/subsys/testsrv.sh &> /dev/null

  9                 if [ $? -eq 0 ] ;then

 10                         echo "file exist" 

 11                 else

 12                          touch /var/lock/subsys/testsrv.sh

 13                         echo "file create successful" 

 14                 fi

 15                     ;;

 16             stop)

 17                     rm /var/lock/subsys/testsrv.sh &> /dev/null

 18                     [ $? -eq 0 ] && echo "停止完成" || echo "已经停止,无需重>    复"

 19                     ;;

 20 

 21             restart)

 22                     rm -f /var/lock/subsys/testsrv.sh &> /dev/null

 23                     touch /var/lock/subsys/testsrv.sh

 24                     echo "restart successfully"

 25                     ;;

 26 

 27             status)

 28                     find /var/lock/subsys/testsrv.sh

 29                 [ $? -eq 0 ] && echo "testsrv.sh running…" || echo "testsrv.    sh is stopped.."

 30                     ;;

 31             *)

 32                     echo "error" ;break

              

2、编写脚本/root/bin/copycmd.sh

(1) 提示用户输入一个可执行命令名称;

(2) 获取此命令所依赖到的所有库文件列表

(3) 复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下;

如:/bin/bash ==> /mnt/sysroot/bin/bash

/usr/bin/passwd==> /mnt/sysroot/usr/bin/passwd

(4) 复制此命令依赖到的所有库文件至目标目录下的对应路径下:

如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2

(5)每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,并重复完成上述功能;直到用户输入quit退出

#!/bin/bash

while true ;do 

read -p "please input cmd:" cmd

if [[ "$cm" == "quit" ]];then

echo "exiting"

exit

else

cmd_path=`whereis $cmd | cut -d ' ' -f2`

cmd_lib_list=`ldd $cmd_path`

cp -a $cmd_path /tmp/test/temp_cp_dir

[ $? -eq 0 ] && echo "cp file successful" || echo "cp file error"

for i in cmd_lib_list;do

cp -a $i /tmp/test/temp_cp_dir

[ $? -eq 0 ] && echo "cp $i successful" || echo "cp lib $i error"

done

echo "cp $cmd successful"

fi

done

原创文章,作者:ldt195175108,如若转载,请注明出处:http://www.178linux.com/37442

(0)
ldt195175108ldt195175108
上一篇 2016-09-19 13:49
下一篇 2016-09-19 13:49

相关推荐

  • 优云携手网易云 助力企业“互联网+”转型

    12月16日,网易旗下“网易云”首届“网易云聚,共创未来”合作伙伴大会在网易杭州园区举行,优云(uyun.cn)成为首批授牌20家企业之一,并作为核心合作伙伴代表现场签署了合作伙伴协议。 右二为优云软件运营经理 柴勇 现场签署合作伙伴协议 会上,网易杭州研究院执行院长汪源介绍了网易云的战略生态全境,提出“产品体系+培训体系+服务体系”的网易云三大核心竞争力,…

    Linux资讯 2017-03-15
  • Linux之账号管理

    Linux之账号管理 一、新增与删除用户:useradd,相关配置文件,passwd,usermod,userdel 在Linux登录系统时会输入账号和密码,所以创建用户也需要这两个数据。新建用户用useradd命令,密码的给予则用passwd命令。 useradd 1.添加新用户 -u: -u  uid username 创建用户时指定uid(如…

    2017-07-23
  • Linux的终端类型

         序  终端的概念是由Ken Thompson提出的,是人机交互的接口。它是一种字符型设备,有多种类型,它大体上分为设备终端,物理终端,虚拟终端,图形终端,串行终端,伪终端。 一、   设备终端  设备终端就是显而易见的外在设备,比如键盘、鼠标和显示器等。 二、&nbsp…

    Linux干货 2016-10-19
  • Java输入输出流

    1.什么是IO       Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 &nb…

    Linux干货 2015-04-10
  • 利用heartbeat v2版搭建高可用mysql

    一、实验环境  1)实验图        2)同步时间;确保可以使用主机名通信;确保可以使用ssh秘钥方式进行彼此登录;由于是两台设备,需要仲裁;  确保可以使用主机名通信 web1修改hosts文件如下: 172.16.2.12 SQL1.linux.com SQL1 172.…

    Linux干货 2015-07-08
  • haproxy

    12.1 高性能负载均衡软件HAProxy介绍 随着互联网业务的迅猛发展,大型电商平台和门户网站对系统的可用性和可靠性要求越来越高,高可用集群、负载均衡集群成为一种热门的系统架构解决方案。在众多的负载均衡集群解决方案中,有基于硬件的负载均衡设备,例如F5、Big-IP等,也有基于软件的负载均衡产品,例如HAProxy、LVS、Nginx等。在软件的负载均衡产…

    2018-01-03