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
阅读(880) | 评论(0) | 转发(0) |