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会一次性执行脚本中诸多 ...
随机推荐
- 沉淀再出发:spring boot的理解
沉淀再出发:spring boot的理解 一.前言 关于spring boot,我们肯定听过了很多遍了,其实最本质的东西就是COC(convention over configuration),将各种 ...
- SSH端口三种转发方式
本地转发 假设有ssh服务器B,telnet服务器C被防火墙与外界隔离,此时外部主机A无法直接访问C服务器. 此时可以通过本地转发的方式让A与C借助B服务器通过ssh协议通信. client fire ...
- August 08th 2017 Week 32nd Tuesday
The very essence of romance is uncertainty. 浪漫的精髓就在于它充满种种可能. Romance is the glamour that can turn th ...
- Ubuntu apt-get 更换源
Ubuntu apt-get 更换源 我们使用清华的镜像源进行更换 Ubuntu 的软件源配置文件是 /etc/apt/sources.list.将系统自带的该文件做个备份,将该文件替换为下面内容,即 ...
- U-Mail邮件营销可视化编辑设计邮件模板so easy
相信每位看过军事演习的朋友都知道,现代战争越来越就像一场沙盘演练,真正做到了“运筹帷幄之中决战千里之外”,后方坐镇指挥战斗的能够将前线战场变得透明,这就叫“可视化战争”,做到了<孙子兵法> ...
- Django settings.py 的media路径设置
转载自:http://www.xuebuyuan.com/676599.html 在一个 models 中使用 FileField 或 ImageField 需要以下步骤: 1. 在你的 settin ...
- js oc与线程
分属不同的线程 //定义需要暴露给js的内容,这里我们只暴露personName和queryPersonName接口 @protocol PersonProtocol <JSExport> ...
- CNN识别验证码2
获得验证码图片的俩个来源: 1.有网站生成验证码图片的源码 2.通过python的requests下载验证码图片当我们的训练样本 我们通过第一种方式来得到训练样本,下面是生成验证码的php程序: &l ...
- xgboost和gbdt区别
1. xgboost在目标函数中加入了正则化项,当正则化项为0时与传统的GDBT的目标函数相同2. xgboost在迭代优化的时候使用了目标函数的泰勒展开的二阶近似,paper中说能加快优化的过程!! ...
- PHP面试系列 之Linux(二)---- Linux系统定时任务
环境:ubuntu 16 一.cron实现定时任务 cron实现的定时任务是周期性循环执行的. 1.安装cron sudo apt-get install cron 2.添加定时任务(进行编辑) cr ...