Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1896216
  • 博文数量: 389
  • 博客积分: 7877
  • 博客等级: 少将
  • 技术积分: 4521
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-10 14:02
文章分类

全部博文(389)

文章存档

2024年(1)

2022年(1)

2021年(1)

2020年(1)

2019年(1)

2018年(3)

2017年(6)

2016年(4)

2015年(8)

2014年(15)

2013年(31)

2012年(19)

2011年(47)

2010年(33)

2009年(105)

2008年(109)

2007年(4)

分类:

2008-09-10 21:53:42

exec在实际当中的应用

. $HOME/.profile > /dev/null 2>&1

DBNM=$1
LOG_DIR=$2
DIAG_LOG=$HOME/$LOG_DIR/$DBNM.log

exec >> $DIAG_LOG 2>&1
echo "====== `date +%y/%m/%d-%H:%M:%S` ======"

db2 "backup db $DBNM online use tsm without prompting"

#RC=$?
#if [ $RC !=0 ] ; then
#       echo "Backup $DBNM was not successful"
#fi

exit 0



任意给出一天20080621 get yesterday的脚本

yy=`date +%Y` #Year yyyy
mm=`date +%m` #Month mm
dd=`date +%d` #Day dd
echo 'today is:' $dd $yy $mm
if [ $dd = "01" ]
then
 lm=`expr $mm - 1 `
  if [ $lm -eq 0 ]
  then
   
    lm=12
     yy=`expr $yy - 1 `
  fi
  echo lm=$lm
   case $lm in
     1|3|5|7|8|10|12) Yesterday=31 ;;
     4|6|9|11) Yesterday=30 ;;
     2)
     if [ ` expr $yy % 4 ` -eq 0 -a `expr $yy % 100 ` -ne 0 -o ` expr $yy % 400 ` -eq 0 ]
     then Yesterday=29
     else Yesterday=28
     fi ;;
    
   esac
   mm=$lm
   echo Yesterday=$Yesterday
   echo $mm
 else
   Yesterday=`expr $dd - 1 `
 fi
 case $Yesterday
     in 1|2|3|4|5|6|7|8|9) Yesterday='0'$Yesterday
    esac
  case $mm in
       1|2|3|4|5|6|7|8|9) mm='0'$mm ;;
  esac
 
  Yesterday=$yy$mm$Yesterday
 echo 'yesterday:'$Yesterday
  Today=`date +%Y%m%d`
 echo 'today:'$Today



文件操作符
bash下
正常登录进去

#ls  看到的结果
anaconda-ks.cfg              Desktop  install.log         jdk-1_5_0_07-linux-i586.rpm  you
apache-tomcat-5.5.12.tar.gz  file     install.log.syslog  jdk-6u2-linux-i586.rpm
apache-tomcat-6.0.14.tar.gz  foobar   jboss-4.0.5.ga.zip  mbox

#ls >&1   看到的结果一样

#ls >&1 也就是
#ls 1>&1

现在关掉default的FD1
#exec 1>&-
再看
#ls  无法看到输出
ls: write error: Bad file descriptor

如果这样
#exec 3>&1
#exec 1<&-
由于default的FD1已被关闭掉,所以现在ls是看不到东西的,想使用ls命令就得如下
#ls 1>&3

default的FD1被关了,怎么打开呢,可以退出现在的terminal(或虚拟terminal)重新登陆
当然也可以这样
#exec 1>&2
再使用
#ls
命令就可以看到输出
此时下面的命令仍然有效
#ls 1>&3
但是一旦退出现在的terminal(或虚拟terminal)那么刚才的命令就不能用了,它会报这样的错
#ls 1>&3
-bash: 3: Bad file descriptor

对标准文件(即0,1,2)的重定向,这我们都会。也就是说,在bash之下,我们只可以同时打开3个文件。
如果想对更多的文件同时打开并进行操作呢?
$exec 3> foobar
$ls >&3
$exec 3>&-
$exec 3< foobar
$cat <&3
$exec 3<&-

问题的理解:
条件:stderr通过管道送给egrep,正确消息仍然送给monitor(不变)
exec 4>&1;(ls you no 2>&1 1>&4 4>&-;ls wu 2>&1 1>&4 4>&-)|egrep \* >file;exec 4>&-

怎么理解上面这一段代码
分开看
#exec 4>&1
#ls you no 2>&1 1>&4|egrep \* >file   //这里把stderr放到stdout里面,然后它被管道接住,1>&4就把stdout放到"&4"里面去了
#exec 4>&-                            //"&4"是什么呢,看它上面的一句,它就是FD1的另外一个复本即输出到monitor




阅读(849) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~