Shell两种for循环对应实现方法解析

前言:

  生产环境中的应用场景:根目录下建立数量不等的目录,挂载不同的硬盘,按sdb-sdn的顺序对应/data2-/datan,就需要for循环嵌套来解决,写成如for i in 1 2 3 ,for j in a b c,1a,2b,3c这样而for循环似乎并不支持for的一一对应,写出来执行的话,会变成第一个循环只对应第二个循环的第一个变量的这种情况,花了点时间尝试,最终用两种不同的方式得以实现,分别是使用第三个变量替代和使用数组为变量编号的方法,直接用实例来说明:

变量替代:

  简单的说就是先插入一条不相干的数据,然后使用sed来进行替换。

for i in $every;do
#$erery表示系统挂载的硬盘,挨个分区,并将脏数据wwwdata1以配置文件格式写入fstab

    parted -s /dev/$i mklabel gpt &>/dev/null || echo "${i}part01出现问题,请检查"
    parted -s /dev/$i mkpart Primary 1 `parted /dev/$i p|grep "^Disk"|cut -d ":" -f2` &>/dev/null || echo "${i}part02出现问题,请检查"
    mkfs -T largefile -t ext4 -b 4096 -m 2 /dev/${i}1 &>/dev/null || echo "${i}mkfs出现问题,请检查"
    echo "/dev/${i}1 /wwwdata1 ext4 defaults 0 0" >> /etc/fstab
    echo "-${i}磁盘格式化分区完成-" && sleep 2
done
for a in $foldername;do

#$foldername表示文件夹名称,使用sed替换wwwdata1,每次使用变量替换一次wwwdata1,即可达成目的。
sed -i 0,/wwwdata1/s//${a}/ /etc/fstab && echo "-${a}文件夹已挂载磁盘-" && sleep 1 || echo "-${a}挂载失败-" done

数组:

  将需要对应的元素分别放入两个数组,然后使用for循环来按元素下标进行调用。举个简单点的例子,大家能看懂就好了:

#!/bin/bash
file=(1 2 3)
disk=(a b c)
for i in `seq 0 2`;do
    echo "${file[i]}${disk[i]}"
done

实际上的应用呢,这两种方法都是可以的,但显而易见,第二种方法更科学,脚本的健壮性更好。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • linux shell常用循环与判断语句(for,while,until,if)使用方法

    shell的循环主要有3种,for,while,until shell的分支判断主要有2种,if,case 一,for循环 #!/bin/bash for file in $(ls /tmp/test/mytest |grep sh) //for in格式是shell for的基本格式,根js的for in类似 do //循环开始你就把它当成{ echo $file done //循环结束你就把它当成} for ((i=0;i<10;i++)) //注意是双小括号,由于受其他语言的影响,很容易搞

  • Shell中的for循环总结

    关于shell中的for循环用法很多,一直想总结一下,今天网上看到上一篇关于for循环用法的总结,感觉很全面,所以就转过来研究研究,嘿嘿... 复制代码 代码如下: for((i=1;i<=10;i++));do echo $(expr $i \* 4);done 在shell中常用的是 for i in $(seq 10) 复制代码 代码如下: for i in `ls` for i in ${arr[@]} for i in $* ; do for File in /proc/sys/net

  • Shell中的循环语句for、while、until实例讲解

    在编程语言中,循环语句是最基本的语法之一,在Shell(这里是Bash)中也不例外,再把以前自己写过的相关内容整理一下吧. 这里包括for/while/until循环,以及变量自增的语法实例. Shell(以Bash为例)中的循环语句一般有for.while.until这几种,偶尔还有写错语法的时候,这里结合实例来自己总结一下.也为今后使用提供一个快捷的资料获取渠道. 一.for循环语句 实例1.1 最基本的for循环: (传统的形式,for var in -) 复制代码 代码如下: #!/bi

  • Shell脚本用for循环遍历参数的方法技巧

    1.当一个脚本需要传入的参数较多时,可以使用for循环进行参数遍历 示例: #!/bin/bash number=65 #定义一个退出值 index=1 #定义一个计数器 if [ -z "$1" ];then #对用户输入的参数做判断,如果未输入参数则返回脚本的用法并退出,退出值65 echo "Usage:$0 + canshu" exit $number fi echo "listing args with \$*:" #在屏幕输入,在$*

  • linux shell循环:for、while、until用法详解

    学习脚本就是为了方便我们运维工作,而对运维人员从来讲,有很多工作也是需要重复执行的,比如我们管理用户帐户时就需要批量创建和删除用户帐户.而此时如果使用系统自带的useradd或者userdel去操作的话,就只能机械式的一个一个创建,一个一个的删除.那我们是不是就可以考虑写一个程序,让它自动化的去创建了.此时,我们的循环执行概念也就出来了.循环就是让程序按照一定的条件反复的执行相关操作,直到不在满足循环条件时结束. 循环语句常见分类: 1,for语句 2,while语句 3,until语句 循环体

  • shell for循环、循环变量值付给其他shell脚本的方法

    本文主要将在shell中如何编写for循环,并将循环变量作为下个shell脚本的参数. shell for 循环: #!第一种写法 类似C.Java for ((i=1; i<=100; i ++)) do echo $i done #!第二种写法 in应用 for i in {1..100} do echo $i done #!第三种写法 seq 使用 for i in `seq 1 100` do echo $i done 将循环变量赋值到下一个脚本: 在运行shell脚本时候,有三种方式来

  • 基于Shell中for循环的几个常用写法分享

    第一类:数字性循环 for1-1.sh #!/bin/bash for((i=1;i<=10;i++)); do echo $(expr $i \* 3 + 1); done for1-2.sh #!/bin/bash for i in $(seq 1 10) do echo $(expr $i \* 3 + 1); done for1-3.sh #!/bin/bash for i in {1..10} do echo $(expr $i \* 3 + 1); done for1-4.sh #!

  • shell中的for循环用法详解

    for 命令: for i in 的各种用法 : for i in "file1" "file2" "file3" for i in /boot/* for i in /etc/*.conf for i in $(seq -w 10) -->等宽的01-10 for i in {1-10} for i in $( ls ) for I in $(< file) for i in "$@" -->取所有位置参数

  • Shell中的for和while循环详细总结

    一.for循环 1.数字段形式 复制代码 代码如下: for i in {1..10} do    echo $i done 2.详细列出(字符且项数不多) 复制代码 代码如下: for File in 1 2 3 4 5 do     echo $File done 3.对存在的文件进行循环 复制代码 代码如下: for shname in `ls *.sh` do           name=`echo "$shname" | awk -F. '{print $1}'`     

  • Shell两种for循环对应实现方法解析

    前言: 生产环境中的应用场景:根目录下建立数量不等的目录,挂载不同的硬盘,按sdb-sdn的顺序对应/data2-/datan,就需要for循环嵌套来解决,写成如for i in 1 2 3 ,for j in a b c,1a,2b,3c这样而for循环似乎并不支持for的一一对应,写出来执行的话,会变成第一个循环只对应第二个循环的第一个变量的这种情况,花了点时间尝试,最终用两种不同的方式得以实现,分别是使用第三个变量替代和使用数组为变量编号的方法,直接用实例来说明: 变量替代: 简单的说就是

  • js两种拼接字符串的简单方法(必看)

    如下所示: function(msgArr) { var len = msgArr.length; var n = 0 ; var htmlSpan = ""; for (var j = 0; j < len - 1; j++) { htmlSpan += '<span>·</span>'; } htmlSpan += '<span class="on">·</span>'; var imgs = []; var

  • python两种获取剪贴板内容的方法

    第一种 import win32clipboard import time #速度快 容易出错 class niubi(): def lihai(self): while True: #jianting().main() t = jianting().main() print(t) class jianting(): def clipboard_get(self): """获取剪贴板数据""" win32clipboard.OpenClipboa

  • MyBatis实现两种查询树形数据的方法详解(嵌套结果集和递归查询)

    目录 方法一:使用嵌套结果集实现 1,准备工作 2,实现代码 方法二:使用递归查询实现 树形结构数据在开发中十分常见,比如:菜单数.组织树, 利用 MyBatis 提供嵌套查询功能可以很方便地实现这个功能需求.而其具体地实现方法又有两种,下面分别通过样例进行演示. 方法一:使用嵌套结果集实现 1,准备工作 (1)假设我们有如下一张菜单表 menu,其中子菜单通过 parendId 与父菜单的 id 进行关联: (2)对应的实体类如下: @Setter @Getter public class M

  • python两种遍历字典(dict)的方法比较

    python以其优美的语法和方便的内置数据结构,赢得了不少程序员的亲睐.其中有个很有用的数据结构,就是字典(dict),使用非常简单.说到遍历一个dict结构,我想大多数人都会想到 for key in dictobj 的方法,确实这个方法在大多数情况下都是适用的.但是并不是完全安全,请看下面这个例子: 复制代码 代码如下: #这里初始化一个dict>>> d = {'a':1, 'b':0, 'c':1, 'd':0}#本意是遍历dict,发现元素的值是0的话,就删掉>>&

  • 水晶报表图片不显示两种问题分析及解决方法

    水晶报表布置后里面的图片不显示的情况,分两种: 一是:水晶报表工具栏上的图片不显示: 二是:水晶报表中的的图片对象不显示: 针对第一种情况的解决方法: 对于工具栏上的图片不显示是由于发布的服务器上,水晶报表所需要的站点相关图片样式 没有找到. 在水晶报表图片不显示的页面上,看页面的源代码.可在<head></head>之间找到 复制代码 代码如下: </head> <link href="/aspnet_client/System_Web/2_0_507

  • Android两种轮询的实现方法

    Android 两种轮询的简单写法,供大家参考,具体内容如下 public void startPolling() { subscriber = Observable.interval(0, POLLING_INTERVAL, TimeUnit.MILLISECONDS). doOnNext(new Action1<Long>() { @Override public void call(Long aLong) { doPolling(). subscribeOn(Schedulers.io(

  • spring+hibernate 两种整合方式配置文件的方法

    之前的文章都是讲解springmvc+spring+mybatis 的整合,而很少有springmvc+spring+hibernate 因为工作的需要,最近在使用hibernate 所以下面我们来看看 spring整合hibernate的配置文件,这里只说spring+hibernate 的配置文件而不说springmvc 因为这些是不用变的. spring整合hibernate 有两种方式 1.注解方式 2.xml方式实现 1.注解方式实现: applicationContext.xml配置

  • Java中的两种for循环介绍

    复制代码 代码如下: package com.zxd.test; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import com.zxd.bea

  • 小程序两种滚动公告栏的实现方法

    先上效果图: 横向滚动栏实现: 网上的几种方案或多或少都有一些问题: 1.setData定时器更新text view的margin-left方法,由于setData的毫秒延时,动画播放起来一卡一卡: 2.纯CSS实现,keyframe等,无法实现循环播放的设置: 3.使用string.length*font-size的方法获取字符串像素长度,不够精确,多次循环播放后误差会累积变大. 我采用的animate动画方法,实测动画流畅,循环播放无误差. 横向滚动代码如下所示 // wxml <view

随机推荐