Linux入门第五天——shell脚本入门(下)基础语法之循环
一、循环
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脚本入门(下)基础语法之循环的更多相关文章
- Linux入门第五天——shell脚本入门(上)基本概念
一.什么是shell脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 二.shell入门 1.先导知识 变量知识补充:https://www.cnblogs. ...
- Linux入门第五天——shell脚本入门(下)基础语法之调试debug
一.如何debug 1.通过sh命令的参数: sh [-nvx] scripts.sh 选项与参数: -n :不要执行 script,仅查询语法的问题: -v :再执行 sccript 前,先将 sc ...
- Linux入门第五天——shell脚本入门(中)基础语法之判断与条件
一.判断式 利用 test 命令进行执行结果的判断(例如判断是否存在该文件):关于test test:test 示例:结合回传值 $? 进行判断:关于$?:$? [root@localhost tm ...
- Linux入门第四天——shell基础
一.shell概述 1.概述 命令行解释器(壳,也就是我们的操作界面),计算机只认识0101的二进制,我们需要通过ASCII表来进行翻译 较为官方的解释是: Shell 是一个用 C 语言编写的程序, ...
- Linux Shell脚本入门--cut命令
Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...
- linux的shell脚本入门
Linux shell脚本入门教程 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活 的工具.Shell不仅仅是命令的收集,而且是一门非常 ...
- Linux Shell脚本入门--wget 命令用法详解
Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...
- 【shell】shell脚本入门
1. 前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚 ...
- Linux学习Day6:编写Shell脚本
Shell脚本命令的工作方式有两种: 交互式(Interactive):用户每输入一条命令就立即执行. 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多 ...
随机推荐
- Asp.Net MVC Identity 2.2.1 使用技巧(六)
使用用户管理器之角色管理 一.建立模型,这里我们其实在之前的技巧(五)已经建好了. 二.建立控制器RolesAdminController 1.在controllers文件夹上点右键>添加> ...
- Linux环境编程之IPC进程间通信(五):Posix消息队列1
对于管道和FIFO来说.必须应该先有读取者存在.否则先有写入者是没有意义的. 而消息队列则不同,它是一个消息链表,有足够写权限的线程可往别的队列中放置消息,有足够读权限的线程可从队列中取走消息.每一个 ...
- Linux中PATH环境变量的作用和使用方法
关于PATH的作用:PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根 ...
- RAID基本知识
RAID是英文Redundant Array of Independent Disks(独立磁盘冗余阵列),简称磁盘阵列.下面将各个级别的RAID介绍如下. 一.为什么使用Raid? 1.对磁盘高速存 ...
- 第2章 K近邻算法
numpy中的tile函数: 遇到numpy.tile(A,(b,c))函数,重复复制A,按照行方向b次,列方向c次. >>> import numpy >>> n ...
- 解决dpdk中出现IOMMU not found的问题
问题 在使用VFIO前,需要在BIOS打开VT-x和VT-d,想把一个PCIe网卡透传到虚拟机中,发现虚拟机启动失败,提示IOMMU没有找到. 输入以下命令确定vt-d开启 dmesg | grep ...
- 使用Docker发布.NET CORE API
1.使用VS 2015 新建了一个Core API项目,然后把他的依赖升级到最新(我机器VS 2015默认的包都是rc版本),然后publish. 2.在publish目录的同级目录下,新建Docke ...
- Vue学习—Vue写一个图片轮播组件
1.先看效果: 熟悉的图片轮播,只要是个网站,百分之90以上会有个图片轮播.我认为使用图片轮播. 第一可以给人以一种美观的感受,而不会显得网站那么呆板, 第二可以增加显示内容,同样的区域可以显示更多内 ...
- BroadcastReceiver(接收广播)
Broadcast Receiver用于接收并处理广播通知(broadcast announcements).多数的广播是系统发起的,如地域变换.电量不足.来电来信等.程序也能够播放一个广播. 程序能 ...
- 【Dubbo源码阅读系列】服务暴露之本地暴露
在上一篇文章中我们介绍 Dubbo 自定义标签解析相关内容,其中我们自定义的 XML 标签 <dubbo:service /> 会被解析为 ServiceBean 对象(传送门:Dubbo ...