分页: 1 / 1
[求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 19:18
由 fengmanloude
#!/bin/bash
times=0
until [ "$times" = 3 ];
do
echo "I love linux."
sleep 2
times=`expr $times + 1`
done
这段小程序 我的理解是 从第0次 到 第四次 做以下的事 输出 “I love linux ”
可是第七行出现的sleep 2 是什么意思哦? 第七行的 expr 怎么理解啊?
这个程序的输出结果是输出4次 i love linux吗? 我执行后 一直输出 知道 我按下ctrl+ c
Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 19:24
由 lilydjwg
- 贴代码记得点下工具栏的 Code标签
- 连 sleep 2 都不明白,我只能推断你没学过 shell。既然如此,那就去学习吧。
Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 19:25
由 cao627
sleep 2 亭2秒?
expr的作用是对后面的表达式做数学运算
你的结果不对
代码: 全选
#!/bin/bash
times=0
until [ "$times" = 3 ];
do
echo "I love linux."
sleep 2
echo $times
times=`expr $times + 1`
done
echo $times 循环中跟踪下times你就明白了
Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 19:30
由 fengmanloude
lilydjwg 写了:
- 贴代码记得点下工具栏的 Code标签
- 连 sleep 2 都不明白,我只能推断你没学过 shell。既然如此,那就去学习吧。
前面发帖时 说过 我是上周五正式接触的shell 正在学……
Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 19:39
由 fengmanloude
cao627 写了:sleep 2 亭2秒?
expr的作用是对后面的表达式做数学运算
你的结果不对
代码: 全选
#!/bin/bash
times=0
until [ "$times" = 3 ];
do
echo "I love linux."
sleep 2
echo $times
times=`expr $times + 1`
done
echo $times 循环中跟踪下times你就明白了
谢谢~
按您的代码输入输出的结果是
代码: 全选
I love linux.
0
I love linux.
1
I love linux.
2
另外你说的 循环中跟踪下times我还是不太明白,如何实现呢~
Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 19:47
由 cao627
echo $times
不是已经加在代码了里吗
输出 0,1,2
没有3吧?理解?
Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 20:00
由 fengmanloude
cao627 写了:echo $times
不是已经加在代码了里吗
输出 0,1,2
没有3吧?理解?
嗯嗯 until N 不包含N 到N—1时停止 是吧?
没理解错的话echo $+变量 是一种追踪变量的方法吧~
另外一点就是“=” 是不是表示赋值时,前后没有空格 ,表示等于(+-*/类似)时,前后有空格啊?
Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 20:05
由 lilydjwg
fengmanloude 写了:cao627 写了:echo $times
不是已经加在代码了里吗
输出 0,1,2
没有3吧?理解?
嗯嗯 until N 不包含N 到N—1时停止 是吧?
没理解错的话echo $+变量 是一种追踪变量的方法吧~
另外一点就是“=” 是不是表示赋值时,前后没有空格 ,表示等于(+-*/类似)时,前后有空格啊?
前后没有空格并且位于命令位置时表示赋值(所以 curl -F
[email protected] img.vim-cn.com 中的等号不表示赋值,因为它位于第二个参数)。所以 [ $times = 3 ] 中的等号也不表示赋值。它作为参数之一传给 [ 命令,[ 认为它表示字符串相等性测试。参数之间需要有空格隔开,所以这个 = 前后有空格。
Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 20:32
由 枫叶饭团
又让我想起了[居然是一个程序
Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 20:42
由 cao627
楼主这么理解好了:
=做为赋值符号时,它好像架起了一座桥,桥不能断开(不能有空格),否者对象过不了桥(无法将=后面的值赋给前面的变量)
= 做等号比较前后两对象时 ,必须要空格,空格是shell分析语法的分隔符,就像英语的句子,单词与单词必须要有分隔符(空格),否者人理解的时候就困难了 =对shell来说也是一个“单词"
shell的“单词”很奇怪,长的很长,如 /home/xxx/aaa/file.png(不管这个目录再长,对shell来说,你也是在告诉它一件事),短的很短,如 | (但是再短,对shell来说也有其独立的意义,所以也是“单词”)。
until 英文是直到的意思
做一件事(do echo "I love linux."),直到你累了( n = 3)
你累了(n = 3),还做这件事(do echo "I love linux.")吗?
echo $变量 本身的作用仅仅是显示变量的内容,
你把这个命令写在你需要的位置,就是在查看该变量在当时的值,这个意义是跟踪
Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 21:10
由 fengmanloude
lilydjwg 写了:fengmanloude 写了:cao627 写了:echo $times
不是已经加在代码了里吗
输出 0,1,2
没有3吧?理解?
嗯嗯 until N 不包含N 到N—1时停止 是吧?
没理解错的话echo $+变量 是一种追踪变量的方法吧~
另外一点就是“=” 是不是表示赋值时,前后没有空格 ,表示等于(+-*/类似)时,前后有空格啊?
前后没有空格并且位于命令位置时表示赋值(所以 curl -F
[email protected] img.vim-cn.com 中的等号不表示赋值,因为它位于第二个参数)。所以 [ $times = 3 ] 中的等号也不表示赋值。它作为参数之一传给 [ 命令,[ 认为它表示字符串相等性测试。参数之间需要有空格隔开,所以这个 = 前后有空格。

Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 21:11
由 fengmanloude
cao627 写了:楼主这么理解好了:
=做为赋值符号时,它好像架起了一座桥,桥不能断开(不能有空格),否者对象过不了桥(无法将=后面的值赋给前面的变量)
= 做等号比较前后两对象时 ,必须要空格,空格是shell分析语法的分隔符,就像英语的句子,单词与单词必须要有分隔符(空格),否者人理解的时候就困难了 =对shell来说也是一个“单词"
shell的“单词”很奇怪,长的很长,如 /home/xxx/aaa/file.png(不管这个目录再长,对shell来说,你也是在告诉它一件事),短的很短,如 | (但是再短,对shell来说也有其独立的意义,所以也是“单词”)。
until 英文是直到的意思
做一件事(do echo "I love linux."),直到你累了( n = 3)
你累了(n = 3),还做这件事(do echo "I love linux.")吗?
echo $变量 本身的作用仅仅是显示变量的内容,
你把这个命令写在你需要的位置,就是在查看该变量在当时的值,这个意义是跟踪

Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 21:12
由 fengmanloude
枫叶饭团 写了:又让我想起了[居然是一个程序

Re: [求助]程序的6,7行怎么理解?
发表于 : 2012-04-09 21:52
由 lilydjwg
fengmanloude 写了:[...]

谢谢你的鲜花~
不过,看到每篇帖子右下角的那个小黄手没?可以点的哦~