bash 循环中变量作用范围的问题分析_linux shell

先来看一段错误的代码。

复制代码 代码如下:

#!/bin/bash
for x in `ls */.*/.*`
cat $x|do echo $x
while read line
  do
    c=`echo $line|awk -F'(' '{print $1}'`
    #echo $c
    i=$((i+$c))
  done
  echo
done
echo $i

以上代码有什么问题呢?
cat之后的管道会使i的值没有被加1。

正确的方法:

复制代码 代码如下:

#!/bin/bash
for x in `ls */.*/.*`
do echo $x
while read line
  do
    c=`echo $line|awk -F'(' '{print $1}'`
    #echo $c
    i=$((i+$c))
  done<$x
  echo
done
echo $i

时间: 2024-10-27 14:49:30

bash 循环中变量作用范围的问题分析_linux shell的相关文章

bash脚本中if语句的使用方法_linux shell

除了 "if,else" 形式之外,还有其它形式的 "if" 语句: 复制代码 代码如下: if [ condition ]then actionfi 只有当 condition 为真时,该语句才执行操作,否则不执行操作,并继续执行 "fi" 之后的任何行. 复制代码 代码如下: if [ condition ]then actionelif [ condition2 ]then action2...elif [ condition3 ]then

变量定义-关于在循环中变量的定义问题

问题描述 关于在循环中变量的定义问题 在while或者do..while循环中,可以在循环中定义变量吗?我看书上是可以的,但这样不会出现定义重复吗? 解决方案 每次一个循环函数,变量就被释放了呃,它是局部变量. 解决方案二: 变量的定义和代码的运行是两回事.好比,你函数中定义了一个变量,你代码调用了2次这个函数,你可能认为变量定义会执行2次?实际上定义是给编译器看的,代码执行中定义变量的语句根本不会起作用. 解决方案三: 不同的语言是不一样的.有的语言变量的作用域就是函数,无论是否定义在循环中,

不错的JS中变量相关的细节分析_javascript技巧

这里讨论一下我对Javascript中变量相关细节的认识,有不当之处欢迎来批. 一.变量的类型 Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: i=100;//Number类型 i="variable";//String类型 i={x:4};//Object类型 i=[1,2,3];//Array类型 JS的这种特性虽然让我们的编码更加灵活,但也带来了

Shell脚本一次读取文件中一行的2种写法_linux shell

写法一: 复制代码 代码如下: #!/bin/bash while read line do       echo $line     #这里可根据实际用途变化 done < urfile 写法二: 复制代码 代码如下: #!/bin/bash cat urfile | while read line do     echo $line done 注意:以上代码中urfile 为被读取的文件 Shell读取文本文件 方法一:通过命令获取所需内容,传递给变量 复制代码 代码如下: var1=$(g

Shell脚本中获取进程ID的方法_linux shell

提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为"批处理进程"). 在某些情况下,你也许想要知道运行中的子shell的PID.这个PID信息可以在不同的情况下使用.比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件.有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身

C语言多线程中变量累加问题的分析

问题:请问下面程序中,main函数打印出的g_iTestInteger变量的值是多少? /********************************************************************** * 版权所有 (C)2015, Zhou Zhaoxiong. * * 文件名称:MultipleThread_1.c * 文件标识:无 * 内容摘要:多线程中的变量值问题 * 其它说明:无 * 当前版本:V1.0 * 作 者:Zhou Zhaoxiong * 完成日

Shell脚本实现apache日志中的状态码分析_linux shell

一.首先将apache日志按天切割 复制代码 代码如下:        vi /etc/httpd/conf/httpd.conf         ErrorLog "|rotatelogs /var/log/httpd/%Y%m%derror_log 86400 480"        CustomLog "|rotatelogs /var/log/httpd/%Y%m%daccess_log 86400 480" combined 二.重启apache服务 复制

shell脚本中case条件控制语句的一个bug分析_linux shell

在shell脚本中,发现case语句的一个问题.就是指定小写字母[a-z]和大写字母[A-Z]的这种方法不管用了. 出现如下情况: 复制代码 代码如下: [root@station1 ~]# cat case.sh#!/bin/bashwhile :doecho -n "input a letter: "read varcase "$var" in  [a-z]) echo "Lowercase letter";;  [A-Z]) echo &q

Bash Shell中忽略大小写的设置方法_linux shell

大多数人在使用 Bash 时,都会对其进行改造,因为默认的设置真的好难用- 参考以下 ~/.inputrc 设置: 复制代码 代码如下: # do not show hidden files in the list set match-hidden-files off   # auto complete ignoring case set show-all-if-ambiguous on set completion-ignore-case on "\ep": history-sear