LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1166|回复: 3

||和匹配问题

[复制链接]
发表于 2008-11-26 12:26:50 | 显示全部楼层 |阅读模式
#!/bin/bash
LOG_DIR=/var/log
ROOT_UID=0     # $UID为0的时候,用户才具有root用户的权限
LINES=50       # 默认的保存行数
E_XCD=66       # 不能修改目录?
E_NOTROOT=67   # 非root用户将以error退出
# 当然要使用root用户来运行.
if [ "$UID" -ne "$ROOT_UID" ]
then
  echo "Must be root to run this script."
  exit $E_NOTROOT
fi  

if [ -n "$1" ]
# 测试是否有命令行参数(非空).
then
  lines=$1
else  
  lines=$LINES # 默认,如果不在命令行中指定.
fi  

#  Stephane Chazelas 建议使用下边
#+ 的更好方法来检测命令行参数.
#+ 但对于这章来说还是有点超前.
#
#    E_WRONGARGS=65  # 非数值参数(错误的参数格式)
#
#    case "$1" in
#    ""      ) lines=50;;
#    *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGARGS;;
#    *       ) lines=$1;;
#    esac
#


cd $LOG_DIR

if [ `pwd` != "$LOG_DIR" ]  # 或者        if[ "$PWD" != "$LOG_DIR" ]
                            # 不在 /var/log中?
then
  echo "Can't change to $LOG_DIR."
  exit $E_XCD
fi  # 在处理log file之前,再确认一遍当前目录是否正确.

# 更有效率的做法是:
#
# cd /var/log || {
#   echo "Cannot change to necessary directory." >&2
#   exit $E_XCD;
# }




# 更有效率的做法是:
#
# cd /var/log || {
#   echo "Cannot change to necessary directory." >&2
#   exit $E_XCD;
# }

||在这段代码的作用是什么额??书上说的是或?这里怎么看都不对啊!!

#    E_WRONGARGS=65  # 非数值参数(错误的参数格式)
#
#    case "$1" in
#    ""      ) lines=50;;
#    *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGARGS;;
#    *       ) lines=$1;;
#    esac
#
*[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGARGS;;
这一行的意思是如果出现不是数字的就显示后面的信息,但是这里的"*[!0-9]*"对吗??
发表于 2008-11-26 15:25:03 | 显示全部楼层
A1 || B1 前面的命令A1没成功则执行后面的命令B1,
{}是执行一个shell命令组
回复 支持 反对

使用道具 举报

发表于 2008-11-26 19:34:13 | 显示全部楼层
cmd1 || cmd2 这种用法其实在很多语言里都很常见,简单来说是这样的:
shell环境(或是其它语言的环境/编译器)都很聪明,
对 A || B 这样的逻辑表达式求值时(假设顺序是从左到右),
如果 A 为真,那么不管 B 是真是假,这个表达式的值都是真,于是就直接得到结果而忽略了 B(假如 B 是一个函数或一条命令,也就不会被调用执行)
如果 A 为假的话(对命令来说是未成功执行或返回错误之类的),那么就必须对 B 求值才能得到结果了(于是假如 B 是函数或命令的话就会被调用执行了)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-26 23:51:22 | 显示全部楼层
Post by tigatron;1914333
cmd1 || cmd2 这种用法其实在很多语言里都很常见,简单来说是这样的:
shell环境(或是其它语言的环境/编译器)都很聪明,
对 A || B 这样的逻辑表达式求值时(假设顺序是从左到右),
如果 A 为真,那么不管 B 是真是假,这个表达式的值都是真,于是就直接得到结果而忽略了 B(假如 B 是一个函数或一条命令,也就不会被调用执行)
如果 A 为假的话(对命令来说是未成功执行或返回错误之类的),那么就必须对 B 求值才能得到结果了(于是假如 B 是函数或命令的话就会被调用执行了)


哦 这样啊 和C语言处理方式差不多
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表