`
mars914
  • 浏览: 432777 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Shell for 循环应用

阅读更多

for 循环 


  在介绍for循环之前,我们要学个非常有用的unix命令:shift

我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当Shell程序不知道其个数时,可以把所有参数一起赋值给变量$*。

若用户要求Shell在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在$1后为$2,在$2后面为$3等。在 shift命令执行前变量$1的值在shift命令执行后就不可用了。  
示例如下:  

#测试shift命令(x_shift.sh)  

until [ $# -eq 0 ]  

do 
    echo "第一个参数为: $1 参数个数为: $#"  

    shift  

done  

 
执行以上程序x_shift.sh: 

 $./x_shift.sh 1 2 3 4  
结果显示如下:  
第一个参数为: 1 参数个数为: 3  

第一个参数为: 2 参数个数为: 2  

第一个参数为: 3 参数个数为: 1  

第一个参数为: 4 参数个数为: 0  


从上可知shift命令每执行一次,变量的个数($#)减一,而变量值提前一位,下面代码用until和shift命令计算所有命令行参数的和。 

#shift上档命令的应用(x_shift2.sh) 

if [ $# -eq 0 ]  

then 
    echo "Usage:x_shift2.sh 参数"  

    exit 1  

fi  

sum=0  

until [ $# -eq 0 ]  

do 
    sum=`expr $sum + $1`  

    shift  

done 
echo "sum is: $sum"   

 
执行上述程序:
QUOTE:
$x_shift2.sh 10 20 15 
其显示结果为:   45  


  shift命令还有另外一个重要用途,Bsh定义了9个位置变量,从$1到$9,这并不意味着用户在命令行只能使用9个参数,借助shift命令可以访问多于9个的参数。  
  Shift命令一次移动参数的个数由其所带的参数指定。例如当shell程序处理完前九个命令行参数后,可以使用shift 9命令把$10移到$1。  
  在熟悉了shift命令后,我们一起看看,Bsh程序中非常有用的for循环语句,这种循环同上面说的while和until循环不同,for语句中的循环是否执行并不由某个条件的真和假来决定,决定for循环是否继续的条件是参数表中是否还有未处理的参数。 
For语句的结构如下:
QUOTE:
for variable in arg1 arg2 … argn  

do  

    command  

    command  

    … …  

done 
下面是for循环的简单例子:  
for LETTER in a b c d  

do 
    echo $LETTER  

done  
程序执行结果如下:   a  b  c  d  
在上面计算参数和的例子中,我们可以用for循环,实现如下:  
#测试 for 程序(x_for.sh)
QUOTE:

 

if [ $# -eq 0 ]  
then 
   echo "Usage:x_for.sh 参数… …"     
   exit 1  
fi  

sum=0  
for I in $*  
do 
   sum=`expr $sum + $I`  
done 
echo "sum is: $sum" 

 
中断循环指令  
  在程序循环语句中,我们有时候希望遇到某中情况时候结束本次循环执行下次循环或结束这个循环,这就涉及到两条语句:continue和break。

  continue命令可使程序忽略其后循环体中的其他指令,直接进行下次循环,而break命令则立刻结束循环,执行循环体后面的的语句。  

#测试continue  
I=1 
while [ $I -lt 10 ]  
do 
  if [ $I -eq 3 ]    
  then      
    continue    
  fi 
  if [ $I -eq 7 ]    
  then      
    break 
  fi    
  echo "$Ic"  
done   

 
执行上面程序,结果如下:  
12456789

  
与或结构  
使用与/或结构有条件的执行命令  
  Shell程序中可以使用多种不同的方法完成相同的功能,例如until和while语句就可以完成相同的功能,同样,除了if-then-else结构可以使命令有条件的执行外,$$和||操作符也能完成上述功能。

在C语言中这两个操作符分别表示逻辑与和逻辑或操作。

在Bourne Shell中,用&&连接两条命令的含义只有前面一条命令成功执行了,后面的命令才会执行。  
  &&操作的形式为:  
    command && command  
  例如语句:  
    
QUOTE:
rm $TEMPDIR/* && echo "Files successfully removed" 
  只有rm命令成功执行以后,才会执行echo命令。若用if-then语句实现上述功能,形式为:  
if rm $TEMPDIR/* 
then 
      echo "Files successfully removed"      

fi 
 

 相反,用||连接两条命令的含义为只有第一条命令执行失败才执行第二条命令,例如:  
    rm $TEMPDIR/* || echo "File were not removed"  
  上面语句的等价形式为:  
if rm $TEMPDIR/*      

then        

    :      

else 
      echo "Files were not removed"      

fi 
  这两种操作符可以联合使用,如下命令行中,只有command1和command2执行成功后,command3才会执行:  
    command1 && command2 && command3  


  下面的命令行表示只有command1成功执行,command2不成功执行时,才会执行command3。

  
  &&和||操作符可以简化命令条件执行的格式,但一般只用于一条命令的条件执行。如果许多命令都使用这两个操作符,那么整个程序的可读性将变的很差,所以在多条命令的条件执行时,最好采用可读性好的if语句。   函数  
  现在我们介绍Shell程序中的函数部分,基本上任何高级语言都支持函数这个东西,能让我们胜好多事情的东西,至少省的频繁的敲击相同的东西.

 
Shell程序中的函数  
  函数又叫做子程序,可以在程序中的任何地方被调用,其格式如下:  
  函数名字()    { 
    command      ... ...      command;    }  


  Shell程序的任何地方都可以用命令 "函数名字" 调用,使用函数的好处有两点,一点是使用函数可以把一个复杂的程序化为多个模块,易于管理,符合结构化程序的设计思想,另一个好处是代码的重用。 
Shell函数和Shel程序比较相似,它们的区别在于Shell程序在子Shell中运行,而Shell函数在当前Shell中运行。因此,在当前Shell中可以看到Shell函数对变量的修改。在任何Shell中都可以定义函数,包括交互式Shell。  
  例如:  
    $dir() {ls -l;}  
    结果是我们在$后面打dir,其显示结果同ls -l的作用是相同的。该dir函数将一直保留到用户从系统退出,或执行了如下所示的unset命令:      $unset dir 
    下面的例子说明了函数还可以接受位置参数:  
    $dir(){_ 
    >echo "permission    ln owner   group    file sz last access      >ls -l $*;      >}  
    运行 dir a* 看产生什么结果  
    参数a*传递到dir函数中并且代替了$*  
    通常Shell程序将在子Shell中执行,该程序对变量的改变只在子Shell中有效而在当前Shell中无效。"."命令可以使Shell程序在当前Shell中执行。用户可以在当前Shell中定义函数和对变量赋值。通常用下面命令来重新初使化.profile对Shell环境的设置。      $ . .profile 
  由于看到这部分相对简单,我们还是顺便说说trap好了 
 

分享到:
评论

相关推荐

    Linux shell 实现用for循环100次的方法

    在Linux shell脚本编程中,for循环是一种常用的控制流程结构,用于执行一系列命令多次,尤其在需要迭代或遍历特定范围的数值时。本篇文章将详细介绍四种不同的方法来使用for循环在shell中执行100次。 ### C语言风格...

    shell for循环与数组应用介绍

    读取一个文件,把每一行赋值给一个数组的变量,然后用for循环打印出来 代码如下:#!/bin/shi=1SUM=`sed -n ‘$=’ tmp.txt` #计算文件的总行数echo “$SUM”while read linedo arr[$i]=”$line” i=`expr $i + 1`...

    shell—for循环语句

    在Linux Shell脚本编程中,`for`循环是一种常见的控制流结构,用于执行一系列命令多次。这个循环结构在处理重复任务、遍历数组或者在指定范围内迭代时非常有用。这里我们将详细探讨三种不同类型的`for`循环语句,并...

    对Linux下shell编程之for循环的实例讲解

    在Linux系统中,shell脚本是一种强大的自动化工具,而for循环是其中不可或缺的一部分。这篇文章将深入探讨Linux shell编程中的for循环,通过实例...希望这些实例和解释能帮助你更好地理解和应用Linux shell的for循环。

    shell for&while; 循环详细总结

    本文档将详细介绍`for`和`while`两种类型的循环在Shell脚本中的应用,并通过实际例子演示如何使用它们来解决问题。 #### 二、`for`循环详解 `for`循环是一种非常灵活的循环结构,它可以用于遍历一系列项目或执行...

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

    for循环常用于已知循环次数的情况。其基本语法如下: ```bash for 变量名 in 列表;do 循环体 done ``` 列表可以包含一系列值,如数字或字符串。例如,我们可以使用花括号 `{start..end}` 或者 `seq` 命令生成整数...

    shell脚本循环调度程序

    在计算机编程领域,shell脚本是一种使用Unix Shell语言编写的脚本程序,它被广泛应用于自动化任务处理、系统管理等领域。标题“shell脚本循环调度程序”表明这是一段用于循环执行特定任务的shell脚本代码。 #### 二...

    Shell脚本中使用for循环和cat命令实现按顺序合并文件

    ### Shell脚本中使用For循环和Cat命令实现按顺序合并文件 #### 背景介绍 在日常工作中,我们经常会遇到需要将多个文本文件合并成一个文件的需求。尤其是在处理大量日志文件或数据文件时,这种操作变得尤为重要。...

    一文让你通俗易懂的学习会 Bash Shell 中的 for 循环语句(for 的两种语法结构 和 嵌套for循环)

    本文将深入探讨两种不同的`for`循环语法结构及其应用。 ### 1. 语法格式 1 - 带取值列表的`for`循环 ```bash for varname in 取值列表 do cmd1 ... cmdn done ``` 在这个结构中,`varname`是循环变量,`取值...

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

    总结一下,Shell中的for循环在处理一一对应关系时,可以通过变量替代或者数组方法实现。变量替代方法简单直观,适用于简单的替换场景;而数组方法则更为灵活,适合处理复杂对应关系,且具有更好的脚本维护性。在编写...

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

    在Shell脚本编程中,`for`循环是一个非常基础且重要的结构,用于执行一系列命令多次。今天我们将深入探讨三种常见的`for`循环用法:数字性循环、字符性循环和路径查找。 ### 第一类:数字性循环 数字性循环通常...

    一个shell for循环与case结合的脚本(监控程序状态)

    这里我们探讨的是如何使用shell脚本来实现这一功能,具体涉及到的关键技术是`for`循环和`case`语句。下面将详细介绍这两个核心元素以及它们在监控程序状态中的应用。 首先,`for`循环是Shell脚本中最常用的循环结构...

    Shell脚本之无限循环的两种方法

    因此,在实际应用中,建议根据具体需求合理设计循环逻辑,确保程序的健壮性和安全性。 最后,希望本文能帮助读者更好地理解和掌握如何在Shell脚本中使用无限循环。对于初学者来说,实践是最好的学习方式,尝试着...

    第二十三章:shell循环之for、while、case.pdf

    Shell 中的循环控制结构主要有三种:for 循环、while 循环和 case 循环。这些循环结构都是控制流程的重要组成部分,能够让用户根据不同的条件执行不同的命令。 一、for 循环 for 循环是一种根据指定的变量及变量...

    Shell脚本for循环语句简明教程

    Shell脚本中的for循环语句是程序控制结构中非常重要的一部分,它允许你重复执行一系列命令,直到特定条件不再满足。这个教程特别适合那些初学者,因为它以简洁易懂的方式介绍了这个概念。 首先,我们来看看for循环...

Global site tag (gtag.js) - Google Analytics