一、循环

  1.不定循环

  有两种形式:

while [ condition ] <==中括号内的状态就是判断式
do <==do 是循环的开始!
程序段落
done <==done 是循环的结束

  当 condition 条件成立时,就进行循环,直
   到 condition 的条件不成立才停止

until [ condition ]
do
程序段落
done

  当 condition 条件成立时,就终止循环, 否则就持续
  进行循环的程序段。

  示例

#!/bin/bash
#描述:循环练习1
#作者:jiangbei on //
until [ "${yes}" == "yes" -o "${yes}" == "YES" ]
do
read -p "input yes/YES:" yes
done
echo "OK,you input the right word!"

  示例:1+2+3+...+10的累加:

 #!/bin/bash
#简介略
##########
declare i=
declare sum=
while [ ${i} -le ]
do
sum=$((${sum}+${i}))
i=$((${i}+))
done
echo "the total is ${sum}"

  // 第一次把第8行的sum写成num,纠结了半天变量的写法,囧。更多的数值计算,参考http://www.mamicode.com/info-detail-1324934.html

  注意:同样,x权限添加等此处省略...(中括号的左右空格请注意!)

  2.固定循环

  与经典的for循环类似,此处不再赘述

  列举值循环:

  语法:

for var in con1 con2 con3 ...
do
程序段
done

  1. 第一次循环时, $var 的内容为 con1 ;
  2. 第二次循环时, $var 的内容为 con2 ;
  3. 第三次循环时, $var 的内容为 con3 ;

  示例:

#!/bin/bash
#略
for animal in dog cat horse
do
echo "The current animal is ${animal}"
done

  

  数字式循环:

  使用seq——seq 为 sequence(连续) 的缩写之意,更多seq相关的用法(可以使用反引号`seq 1000`,或者$( seq 1000 )),

  参考http://linux.51yip.com/search/seq

  利用数字式改写累加示例如下:

#!/bin/bash
#略
declare -i sum=
for i in $(seq )
do
sum=$((${sum}+${i}))
done
echo "the total is ${sum}"

  当然,还有另外一种写法:{1..100},这是bash内置的写法,并且支持{a..g}表示a到g及中间的字母!

  最后,采用循环+判断的写法如下:

  最后,让我们来玩判断式加上循环的功能!我想要让使用者输入某个目录文件名, 然后我找
  出某目录内的文件名的权限,该如何是好?呵呵!可以这样做啦~

#!/bin/bash
#略
read -p "Please input a directory:" dir
if [ "${dir}" == "" -o ! -d "${dir}" ];then
echo "The ${dir} is not exist!"
exit
fi
filelist=$(ls ${dir})
for file in ${filelist}
do
perm=""
test -r "${dir}/${file}" && perm="${perm}r"
test -w "${dir}/${file}" && perm="${perm}w"
test -x "${dir}/${file}" && perm="${perm}x"
echo "the file ${dir}/${file} has the perm:${perm}"
done

  输入/tmp就可以测试啦!

  数值处理的循环:——熟悉的格式

for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done

  继续改写累加的示例:

#!/bin/bash
#略
declare -i sum=
for (( i=; i<=; i++))
do
sum=$((${sum}+${i}))
done
echo "the total is ${sum}"

  再举一个数组的例子(数据类型介绍参考基本概念随笔)

#!/bin/bash
#略
#定义数组
list[]="糖醋排骨"
list[]="麻婆豆腐"
list[]="宫保鸡丁"
size=
check=$((${RANDOM} * ${size} / + ))
echo "your choice is ${list[${check}]}"

// shell有一个环境变量RANDOM,范围是0--32767

Linux入门第五天——shell脚本入门(下)基础语法之循环的更多相关文章

  1. Linux入门第五天——shell脚本入门(上)基本概念

    一.什么是shell脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 二.shell入门 1.先导知识 变量知识补充:https://www.cnblogs. ...

  2. Linux入门第五天——shell脚本入门(下)基础语法之调试debug

    一.如何debug 1.通过sh命令的参数: sh [-nvx] scripts.sh 选项与参数: -n :不要执行 script,仅查询语法的问题: -v :再执行 sccript 前,先将 sc ...

  3. Linux入门第五天——shell脚本入门(中)基础语法之判断与条件

    一.判断式 利用 test 命令进行执行结果的判断(例如判断是否存在该文件):关于test  test:test 示例:结合回传值 $? 进行判断:关于$?:$? [root@localhost tm ...

  4. Linux入门第四天——shell基础

    一.shell概述 1.概述 命令行解释器(壳,也就是我们的操作界面),计算机只认识0101的二进制,我们需要通过ASCII表来进行翻译 较为官方的解释是: Shell 是一个用 C 语言编写的程序, ...

  5. Linux Shell脚本入门--cut命令

    Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...

  6. linux的shell脚本入门

    Linux shell脚本入门教程 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活 的工具.Shell不仅仅是命令的收集,而且是一门非常 ...

  7. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  8. 【shell】shell脚本入门

    1. 前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚 ...

  9. Linux学习Day6:编写Shell脚本

    Shell脚本命令的工作方式有两种: 交互式(Interactive):用户每输入一条命令就立即执行. 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多 ...

随机推荐

  1. Asp.Net MVC Identity 2.2.1 使用技巧(六)

    使用用户管理器之角色管理 一.建立模型,这里我们其实在之前的技巧(五)已经建好了. 二.建立控制器RolesAdminController 1.在controllers文件夹上点右键>添加> ...

  2. Linux环境编程之IPC进程间通信(五):Posix消息队列1

    对于管道和FIFO来说.必须应该先有读取者存在.否则先有写入者是没有意义的. 而消息队列则不同,它是一个消息链表,有足够写权限的线程可往别的队列中放置消息,有足够读权限的线程可从队列中取走消息.每一个 ...

  3. Linux中PATH环境变量的作用和使用方法

    关于PATH的作用:PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根 ...

  4. RAID基本知识

    RAID是英文Redundant Array of Independent Disks(独立磁盘冗余阵列),简称磁盘阵列.下面将各个级别的RAID介绍如下. 一.为什么使用Raid? 1.对磁盘高速存 ...

  5. 第2章 K近邻算法

    numpy中的tile函数: 遇到numpy.tile(A,(b,c))函数,重复复制A,按照行方向b次,列方向c次. >>> import numpy >>> n ...

  6. 解决dpdk中出现IOMMU not found的问题

    问题 在使用VFIO前,需要在BIOS打开VT-x和VT-d,想把一个PCIe网卡透传到虚拟机中,发现虚拟机启动失败,提示IOMMU没有找到. 输入以下命令确定vt-d开启 dmesg | grep ...

  7. 使用Docker发布.NET CORE API

    1.使用VS 2015 新建了一个Core API项目,然后把他的依赖升级到最新(我机器VS 2015默认的包都是rc版本),然后publish. 2.在publish目录的同级目录下,新建Docke ...

  8. Vue学习—Vue写一个图片轮播组件

    1.先看效果: 熟悉的图片轮播,只要是个网站,百分之90以上会有个图片轮播.我认为使用图片轮播. 第一可以给人以一种美观的感受,而不会显得网站那么呆板, 第二可以增加显示内容,同样的区域可以显示更多内 ...

  9. BroadcastReceiver(接收广播)

    Broadcast Receiver用于接收并处理广播通知(broadcast announcements).多数的广播是系统发起的,如地域变换.电量不足.来电来信等.程序也能够播放一个广播. 程序能 ...

  10. 【Dubbo源码阅读系列】服务暴露之本地暴露

    在上一篇文章中我们介绍 Dubbo 自定义标签解析相关内容,其中我们自定义的 XML 标签 <dubbo:service /> 会被解析为 ServiceBean 对象(传送门:Dubbo ...