免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1538 | 回复: 6
打印 上一主题 下一主题

关于 && 和 || 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-08 10:54 |只看该作者 |倒序浏览
有一段C代码:
if ((year % 4 == 0 && year % 100 != 0) || (year % 4 == 0 && year % 400 == 0))
        printf("yes");
       
else
        printf("no");


想翻译成shell, 如下:

if [ `expr $year % 4` -eq 0 ] && [ `expr $year % 100` -ne 0 ] || [ `expr $year % 4` -eq 0 ] && [ `expr $year % 400` -eq 0 ] ; then
        echo "yes"
else          echo "no"
fi

偶对if 里面的逻辑判断一直没有用过,不知道这样对不对,大虾帮忙看看,谢谢.

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
2 [报告]
发表于 2006-04-08 13:14 |只看该作者
if [[ `expr $year % 4` -eq 0  &&  `expr $year % 100` -ne 0  ||  `expr $year % 4` -eq 0  &&  `expr $year % 400` -eq 0 ]] ; then

if [ `expr $year % 4` -eq 0  -a  `expr $year % 100` -ne 0  -o  `expr $year % 4` -eq 0  -a  `expr $year % 400` -eq 0 ] ; then

_______________________________________________________________
跟c里面一样,只是将() 换成 [[ ]] 或 [] 就行了。
[[]]是[] 的扩展尽量用 [[]] 吧。

只是数字比较的话:
if (( year % 4 == 0  &&  year % 100 != 0  ||  year % 4 == 0  &&  year % 400 == 0 )) ; then
除了(()) 外,其他跟c一模一样就行。
_______________________________________________________________
纠正一下:[] 中要用 -a -o 而不是 && ||

[ 本帖最后由 yjh777 于 2006-4-14 09:20 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-04-08 16:56 |只看该作者
非常感谢这位大虾!!

高手!

论坛徽章:
0
4 [报告]
发表于 2006-04-08 17:23 |只看该作者
只是数字比较的话:
if (( year % 4 == 0  &&  year % 100 != 0  ||  year % 4 == 0  &&  year % 400 == 0 )) ; then
除了(()) 外,其他跟c一模一样就行。

if 和 then 之间的 (( )) 是什么命令呢? 在BSH里面到是好用,可否再指教以下

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
5 [报告]
发表于 2006-04-09 18:18 |只看该作者
原帖由 pinecrane 于 2006-4-8 17:23 发表
只是数字比较的话:
if (( year % 4 == 0  &&  year % 100 != 0  ||  year % 4 == 0  &&  year % 400 == 0 )) ; then
除了(()) 外,其他跟c一模一样就行。

if 和 then 之间的 (( )) 是什么命 ...

不是命令,是关键字,就跟c里的()是一个道理。
运算结果可以赋给变量 var=$((expression)).

论坛徽章:
0
6 [报告]
发表于 2006-04-12 14:59 |只看该作者
if [[ `expr $year % 4` -eq 0  &&  `expr $year % 100` -ne 0  ||  `expr $year % 4` -eq 0  &&  `expr $year % 400` -eq 0 ]] ; then



if [ `expr $year % 4` -eq 0  &&  `expr $year % 100` -ne 0  ||  `expr $year % 4` -eq 0  &&  `expr $year % 400` -eq 0 ] ; then

只有[[]]和[]的区别,这两种写法有什么不同么?

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
7 [报告]
发表于 2006-04-13 20:29 |只看该作者
The [[ ]] construct is the more versatile Bash version of [ ]. This is the extended test
command, adopted from ksh88.

Bash版本中,[[]]结构比[]更加万能/多才多艺,它是test命令的扩展,从ksh88中借鉴而来。
Using the [[ ... ]] test construct, rather than [ ... ] can prevent many logic errors in scripts.
For example, the &&, ||, <, and > operators work within a [[ ]] test, despite giving an
error within a [ ] construct.

相对[]而言,在脚本里使用[[]]结构可以防止许多逻辑错误。例如:在[[]]中使用&&, ||, <,
和 >这些操作符可以正常工作,而在[]中直接使用可能会出错。


__________________________________________________________________________
上面的英文介绍来自:
Advanced Bash-Scripting Guide(An in-depth exploration of the art of shell scripting)

[ 本帖最后由 yjh777 于 2006-4-13 20:34 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP