shell变量重新赋值问题

#!/bin/shbdate=$(date+%Y%m%d)bl=falsereadFile(){catfilename.txt|whilereadlinedostr=${... #! /bin/sh
bdate=$(date +%Y%m%d)
bl=false
readFile(){
cat filename.txt | while read line
do
str=${line##*/}
if [ $bdate = $str ] ; then
echo $bdate "File already exists. Do you want to overwrite the existing file?"
echo "Please enter a yes or no:"
bl=true
echo "x = $bl" //打印的是 x = true
#readoper
break
fi
done < filename.txt
}
readFile
echo $bl
最后打印的是false,说明我重新赋值是不成功的?本人初学,还请指教
展开
 我来答
匿名用户
推荐于2016-06-01
展开全部

先不正面回答问题。先谈一个脚本中可疑之处。


在对文件filename.txt的每一行进行相同或有规律的处理时,常用2种方法。

常用的第一种方法是(就是文件内容输入重定向的方法):

    while read line
    do
        对$line的处理命令
    done < filename.txt

    

常用的第二种方法是(cat加管道的方法):

    cat filename.txt | while read line
    do
        对$line的处理命令
    done

针对这2种方法,举例如下:

$ cat filename.txt
Jack
Mike
Rose

$ cat a1.sh
#!/bin/bash
while read line
do
    echo "The name is $line"
done < filename.txt

$ cat a2.sh
#!/bin/bash
cat  filename.txt | while read line
do
    echo "My name is $line"
done

$ a1.sh    (或者运行./a1.sh)
The name is Jack
The name is Mike
The name is Rose

$ a2.sh     (或者运行./a2.sh)
My name is Jack
My name is Mike
My name is Rose


你在上面所提供的脚本中,cat加管道的方法(cat  filename.txt |  while...)、文件内容输入重定向的方法(...done < filename.txt )同时使用了,可能不算是问题,但几乎没有同时使用的。


下面言归正传。

下面的例子,一个输出flase, 一个输出true,看完例子就知道答案了:

$ cat filename.txt
Jack
Mike
Rose

$ cat b1.sh
#!/bin/bash
bl=false
cat  filename.txt | while read line
do
    bl=true
    echo "x=$bl"
done
echo $bl

$ cat b2.sh
#!/bin/bash
bl=false
while read line
do
    bl=true
    echo "x=$bl"
done < filename.txt
echo $bl

$ b1.sh    (或者运行./b1.sh)
x=true
x=true
x=true
false

$ b2.sh    (或者运行./b2.sh)
x=true
x=true
x=true
true

  供参考,谢谢!    

沫神钢虚1F
2017-01-12 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.6万
采纳率:59%
帮助的人:1141万
展开全部
./表示执行当前目录下某个可执行文件,这个文件不一定是bash脚本,但是sh方式就只能执行shell脚本,如果一个二进制可执行程序你用sh ./binExample这种方式执行,会报错的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式