文档章节

for 循环中的一个小技巧

胡子叭槎
 胡子叭槎
发布于 2016/10/30 12:53
字数 501
阅读 23
收藏 0

      开始学习shell的时候使用for循环我们都遇到过在for循环中无法使用变量的例子,比如 for i in {1..$tmp} 

这个时候我们打出来的$i 会直接把{1..$tmp} 看做一个字符串打印出来,而不是我们想要的循环结果。下面用eval 可以解决。

  1 #!/bin/bash
  2 #
  3 #
  4 #
  5 # Aut wangzilong
  6 # Shell Document
  7 tmp=10
  8 for i in {1..$tmp}
  9     do
 10       eval  echo $i
 11     done

运行结果:

[root@wzlvm tmp]# sh 1.sh
1 2 3 4 5 6 7 8 9 10

OK 解决问题

上面的例子虽然把循环中i的值打印出来了,但是如果需要把i中的值作为一个参数依然无法解决错误:

16 array2=(1 2 3 4)
 17 num=${#array2[*]}
 18 num=$[num-1]
 19 for i in {1..$num}
 20     do
 21         eval echo ${array2[$i]}
 22     done

# 上面的代码会报错
2.sh: line 21: {1..3}: syntax error: operand expected (error token is "{1..3}")

所以我们可以用seq很容易解决

  1 #!/bin/bash
  2 #
  3 #
  4 #
  5 # Aut wangzilong
  6 # Shell Document
  7 i=10
  8 array=('a' 'b' 'c' 'd')
  9 num=${#array[*]}
 10 num=$[num-1]
 11 for j in $(seq 0 $num)
 12     do
 13         echo ${array[$j]}
 14     done

# 上面的代码运行结果:
[root@wzlvm tmp]# sh 2.sh
a
b
c
d

OK解决问题,用这个办法可以解决for循环的正序倒序,动态数组遍历都可以。

通过上面的方式我们可以打印一个金字塔:

  1 #!/bin/bash
  2 #
  3 # 打印一个正立的金字塔
  4 #
  5 # Aut wangzilong
  6 # Shell Document
  7 
  8 if [ $# -lt 1 ];then
  9     echo '请输入金字塔行数'
 10 else
 11 #  1 外部按行循环
 12 num=$1
 13 for i in $(seq 1 1 $num)
 14     do
 15 #  2 内部每一行先循环打印空格
 16        for j1 in $(seq 1 1 $[num-i])
 17            do
 18                printf ' '
 19            done
 20 #  3 内部每一行再循环打印*
 21        for j2 in $(seq 1  $[i*2-1])
 22            do
 23                printf '*'
 24            done
 25     printf '\n'
 26     done
 27 fi
[root@wzlvm tmp]# sh 2.sh 30
                             *
                            ***
                           *****
                          *******
                         *********
                        ***********
                       *************
                      ***************
                     *****************
                    *******************
                   *********************
                  ***********************
                 *************************
                ***************************
               *****************************
              *******************************
             *********************************
            ***********************************
           *************************************
          ***************************************
         *****************************************
        *******************************************
       *********************************************
      ***********************************************
     *************************************************
    ***************************************************
   *****************************************************
  *******************************************************
 *********************************************************
***********************************************************

 

© 著作权归作者所有

共有 人打赏支持
胡子叭槎
粉丝 21
博文 126
码字总数 132913
作品 0
成都
数据库管理员
12个非常有用的JavaScript 技巧

在这篇文章中,我将分享12个非常有用的JavaScript 技巧。这些技巧可以帮助你减少并优化代码 1)使用!!操作符转换为布尔类型 有时,我们需要检查一些变量是否存在,或者它是否具有有效值,将它...

陈安一
2017/06/19
0
0
Kotlin2.4while和for循环

Kotlin的迭代应该是和Java最接近的。while循环和Java完全一样。for循环仅以唯一一种形式存在,和Java的for-each循环一直。 2.4.1while循环 Kotlin中有while循环和do-while循环,它们的语法和...

无心下棋
05/13
0
0
Linux 用户的 3 个命令行小技巧

Linux 用户的 3 个命令行小技巧 原文:http://www.tecmint.com/useful-linux-hacks-commands/作者: Avishek Kumar 译文:LCTT https://linux.cn/article-5635-1.html译者: goreliu Linux世......

Carl_
2015/06/17
0
0
你未必知道的12个JavaScript技巧

在这篇文章中将给大家分享12个有关于JavaScript的小技巧。这些小技巧可能在你的实际工作中或许能帮助你解决一些问题。 使用操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查...

鱼煎
2016/06/25
46
1
12个JavaScript技巧

给大家分享12个有关于JavaScript的小技巧。这些小技巧可能在你的实际工作中或许能帮助你解决一些问题。 使用操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有...

HJCui
2016/07/22
24
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

kernel version does not match DSO version

错误信息: kernel version 384.11 does not match DSO version 384.130.0 原因是: cuda driver版本太低,不匹配DSO 简单有效的修复方法,升级nvidia driver, 步骤如下: 1. google seach ...

刘小米
今天
0
0
maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部