shell脚本编程基础之for循环
循环结构
循环需要有进入条件和退出条件,如果没有退出条件,则就会一直循环下去 for 变量 in 列表;do
循环体
done
生成列表及示例
{1..100}:生成1到100的整数列表
`command`:使用命令生成列表 Example1:
#!/bin/bash
for i in /data/*;do
echo "$i"
done
for循环可以对目录下的文件列表进行循环;如果目录下有三个文件,则执行三次循环;如果/data/下有文件f1.txt,则i的值就为/data/f1.txt Example2:
#!/bin/bash
#
declare -i SUM=0 #指明SUM变量是一个整数型变量;变量的值为整数;指定求和变量的初始值为0 for I in {1..100};do
let SUM=$[$SUM+$I] #指定SUM变量是一个整数型变量
done
echo "the sum number is: $SUM"
把列表里面的1赋值给变量I,SUM变量的初始值为0,所以SUM变量的值为$SUM+$I,SUM=0+1=1;当I=2时,SUM的值为$SUM+$I=1+2=3,以此类推,退出循环的条件为I为100时,列表已经没有元素,退出循环,最后打印SUM的值,从1+2+3..100 Example3:
#!/bin/bash
declare -i SUM=0
declare -i SUMS=0
for i in {1..10};do
NUM=$[$i%2]
if [ $NUM -eq 0 ];then
let SUM=$[$SUM+$i]
else
let SUMS=$[$SUMS+$i]
fi
done
echo "even is: $SUM"
echo "odd is: $SUMS"
计算100以内的奇数和偶数的和各是多少 Example4:
#!/bin/bash
declare -i SUM=0
for I in {1..100};do
SUMS=$[$I%3]
if [ $SUMS -eq 0 ];then
SUM=$[$SUM+$I]
fi
done
echo "$SUM"
计算100以内,3的倍数的数相加的和 Example5:
#!/bin/bash
if [ $# -lt 1 ];then
echo "Parameters not empty"
exit 8 #必须指定exit,如果不添加exit,执行完这个判断之后还会继续执行下面的判断
fi if [ $1 == '--add' ];then
for i in {1..10};do
if ! id user$i &>/dev/null;then
useradd user$i
echo "user$i" | passwd --stdin user$i &>/dev/null
echo "add user$i finished"
else
echo "user$i exists"
fi
done
elif [ $1 == '--del' ];then
for i in {1..10};do
if id user$i &>/dev/null;then
userdel -r user$i
echo "Delete user$i finished"
else
echo "no such user"
fi
done
else
echo "Input error"
exit 10
fi
循环添加10个用户或者删除10个用户 Example6:
#!/bin/bash
if [ $1 == '--add' ];then
for i in `echo "$2" | sed -n 's/,/ /gp'`;do #sed后面必须加g选项,否则只搜索替代第一个,加上g是全局搜索替代
if id $i &>/dev/null;then
echo "$i exists"
else
useradd $i
echo "$i" | passwd --stdin $i &>/dev/null
echo "add $i finished"
fi
done
elif [ $1 == '--del' ];then
for i in `echo "$2" | sed -n 's/,/ /gp'`;do
if id $i &>/dev/null;then
userdel -r $i
echo "delete $i"
else
echo "$i not exists"
fi
done
else
echo "unknow options"
fi
通过--add xxx,xxx,xxx进行自定义添加和删除用户
组合条件测试
-a:与关系
-o:或关系
!:非关系 Example:
[ $# -gt 1 -a $# -le 3 ]
[ $# -gt 1 ] && [ $# -le 3 ]
德·摩根定律
非(A 且 B) = (非 A) 或 (非 B)
非(A 或 B) = (非 A) 且 (非 B) Example:
#!/bin/bash
declare -i MAX=0
declare -i MIN=0 for i in {1..10};do
MYRAND=$RANDOM #需要把RANDOM变量生成的随机数保存到另一个变量中,如果不保存,最下面的判断成立,会给MAX、MIN赋值一个新的随机数
[ $i -eq 1 ] && MIN=$MYRAND #MIN只需要参与一次循环,如果不加限制条件,MIN会参与10次循环,这样随机数会一直等于MIN,而不会小于
if [ $i -le 9 ];then
echo -n "$MYRAND," #-n表示取消换行符
else
echo "$MYRAND"
fi
[ $MYRAND -gt $MAX ] && MAX=$MYRAND #添加判断条件;如果MYRAND的值大于MAX值,则MAX的值为MYRAND的值
[ $MYRAND -lt $MIN ] && MIN=$MYRAND #如果MYRAND的值小于MIN的值,则MIN的值为MYRAND的值
done
echo "$MAX,$MIN"
循环10次,生成10个随机数,取出其中的最大最小值
shell脚本编程基础之for循环的更多相关文章
- Linux shell脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- SHELL脚本编程基础知识
SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...
- shell脚本编程基础介绍
Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...
- linux基础—课堂随笔_03 SHELL脚本编程基础
shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...
- Linux Shell脚本编程-基础1
概述: shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...
- shell脚本编程基础
最近学习了shell脚本编程,感觉自己的脚本写的不太好,所以想把shell脚本相关的知识系统的整理一下,便于以后的学习和使用. 一.shell脚本基础 shell脚本是利用shell的功能 ...
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- Linux基础篇–shell脚本编程基础
本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础程序:指令+数据程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心 ...
- Shell脚本编程基础笔记一
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8176137.html 一:脚本文件的创建.格式.运行 1:创建shell脚本 首先,要创建一个文件 touch ...
随机推荐
- 阿里巴巴 Java 开发手册 (十二)安全规约
1. [强制]隶属于用户个人的页面或者功能必须进行权限控制校验. 说明:防止没有做水平权限校验就可随意访问.修改.删除别人的数据,比如查看他人的私信 内容.修改他人的订单. 2. [强制]用户敏感数据 ...
- SOFT-NMS (二) (non maximum suppression,非极大值抑制)
import numpy as np boxes = np.array([[200, 200, 400, 400], [220, 220, 420, 420], [200, 240, 400, 440 ...
- spring中AspectJ的使用
目录 AspectJ: AOP术语 通知的类型 切入点表达式 基于xml的AspectJ编程 导入jar包 定义切面类 引入约束 AOP配置 基于注解的AspectJ编程 AspectJ: 什么是AO ...
- Eclipse的常用设置。
用惯了VS,再回过去用Eclipse真是一件痛苦的事.so,在这里记录下使用过程中的一些设置以做备忘. 1.代码自动提示 在我们忘记方法名或者想偷懒时,代码自动提示很管用.不过Eclipse默认是输入 ...
- Java自学-操作符 位操作符
Java的位操作符 位操作符 在实际工作中使用并不常见. 示例 1 : 一个整数的二进制表达 位操作都是对二进制而言的,但是我们平常使用的都是十进制比如5. 而5的二进制是101. 所以在开始学习之前 ...
- Sequelize手记 - (一)
最近开始接触数据库,现在普遍用的都是Mysql数据库,简单的了解了一下sql语句,没有太深入的学习,然后就开始找相关的ORM框架,然后锁定了Sequelize,个人感觉很强大,搜索了一些文档,但是很让 ...
- Oracle数据库之操作符及函数
一.操作符: 1.分类: 算术.比较.逻辑.集合.连接: 2.算术操作符: 执行数值计算: -- 工资加1000 from emp; 3.比较操作符: -- 比较运算符(between and包头不包 ...
- Linux目录结构说明
文件系统层级标准(filesystem hierarchy standard,FHS). http://www.pathname.com/fhs/pub/fhs-2.3.html 以下是对这些目录的解 ...
- MES选型很困惑?避开这三个禁忌!
MES系统的选型除了要充分剖析自己企业,掌握自己企业的需要.信息化的目标.自身的特点外,还要完全了解MES系统供应商,对其实力.软件性能.服务.用户.软件实施速度.价格进行了解与分析,这也是MES系统 ...
- Jmeter配置元件
1.CSV Data Set Config Filename 参数化文件的路径 文件中的数据最后一行不能有空行,空行会被当做一个参数 若要进行分布式压测,可以将参数化文件放在jmeter的bin目 ...