第4章 处理用户输入与显示数据————(创建本地临时文件、在/temp中创建临时文件、创建临时目录、tee命令)

4.6 使用临时文件

         Linux系统保留了一个特殊的目录位置,以供临时文件使用。Linux使用/tmp目录处理不需要永久保存的文件。大部分Linux发行版的系统配置都是在启动时自动删除/tmp目录中的任何文件。

         系统上的任何用户账户都有读取和写入/tmp目录中的文件的权限。该特性可以帮助用户轻松创建临时文件,而无需担心它们的清理问题。创建临时文件:mktemp命令可以轻松在/tmp文件夹中创建一个唯一的临时文件。shell创建该文件但是不使用默认的umask值。相反,它仅向文件所有者分配读取和写入权限,并使用户成为文件的所有者。创建文件之后,可以脚本对文件进行完整权限的读取和写入,但其他人都不能访问它。

4.6.1 创建本地临时文件

         默认情况下,mktemp在本地目录创建文件。要使用mktemp命令在本地目录中创建临时文件,只需要指定一个文件名即可。模块包括文本文件以及附加到文件名后的6个XXXXXX。mktemp命令使用一个6字符代码替换6个XXXXXX,以确保文件名在目录中的唯一性

        

         可以创建多个临时文件,每个文件确保是唯一的。可以看出,mktemp命令的输出是它们创建的文件的名称。在脚本中使用mktemp命令时,需要使用一个变量保存该文件名,以便稍后再脚本中引用。        

#!/bin/bash
#创建临时文件,然后对临时文件进行读写
tempfile=`mktemp test.XXXXXX`
#创建文件输出描述符号
exec 3>$tempfile
echo "对临时文件$tempfile进行写操作"
#对临时文件进行写操作
echo  "      《静夜诗》" >&3
echo  "            李白" >&3
echo "床前明月光,疑是地上霜。" >&3
echo "举头望明月,低头思故乡!" >&3
#关闭文件输出描述符
exec 3>&-
echo "临时文件的内容"
#创建文件输出描述符号
exec 3<$tempfile
count=1
#对临时文件进行读操作
while read line <&3
do
    echo "第$count行:$line"
    count=$[ $count +1 ]
done
#关闭文件输出描述符
exec 3<&-
echo "删除临时文件:$tempfile,禁止错误信息的输出!"
rm -rf $tempfile 2>/dev/null


         该脚本使用mktemp命令创建一个临时文件,并将文件名分配给$tempfile变量。然后使用临时文件作为文件描述符3的输出重定向文件。然后关闭临时文件输出描述符。然后创建临时文件输入描述符3,对临时文件进行读取。读取完成然后关闭文件输入描述符。最后,使用rm命令删除创建的临时文件并禁止错误信息输出!

4.6.2 在/temp中创建临时文件

         -t选项强迫mktemp在系统的/temp文件夹中创建临时文件。但使用该选项时,mktemp命令返回用于创建临时文件的完整路径名,而不是文件名。由于mktemp命令返回完整路径名,因此可以从Linux系统的任何目录引用临时文件,无论系统将临时目录放在哪个位置。
  

#!/bin/bash
#在/tmp路径下创建一个临时文件
tempfile=`mktemp -t tmp.XXXXXX`
#向临时文件中写入数据
echo "This is a tmp file">$tempfile
#向临时文件追加数据,不覆盖原有数据
for (( i=1;i<=9;i++ ))
do
  for(( j=1;j<=9;j++))
   do
	[ $j -le $i ]  && echo -n "$i * $j= $[ $i * $j ] "
   done
   echo " "
done >>$tempfile

echo "临时文件$tempfile位于:$tempfile"
filename=`basename $tempfile`
echo $filename
echo "显示临时文件中的内容"
cat $tempfile
rm -rf $tempfile 2>/dev/null

      

4.6.3 创建临时目录

         -d选项让mktemp命令创建一个临时目录而不是一个文件。 

4.6.4 记录消息

         有时候有必要将输出同时发送到监视器和日志文件。这种情况下不需要使用两次重定向,只需要使用特殊命令tee命令即可。

         tee命令就像管道的T型接头。它将STDIN的数据同时发送到两个目的地一个是STDOUT,另一个是tee命令指定的文件名tee filename。

         由于tee重定向来自STDIN的数据,因此可以与管道命令配置使用重定向任何命令的输出。默认情况下,tee命令每次使用时都会覆盖输出文件。如果希望向文件添加数据,必须使用-a选项。使用这种技术,可以将数据保存在文件中,同时将数据显示在监视器上供用户查看。tee命令参数:

        

         tee操作实例:        

#!/bin/bash
#创建一个临时文件
tempfile=`mktemp  tmp.XXXXXX`

#在显示屏上输出信息,同时把信息输出到临时文件
echo "This is a tmp file"| tee $tempfile

#在显示屏上输出信息,同时把信息输出到临时文件
#且不覆盖原有的数据
echo "Hello ,ewang!" | tee -a $tempfile
echo "What can I do for you?" | tee -a $tempfile
echo "临时文件名:$tempfile"

#显示临时文件中的内容
echo "显示临时文件中的内容"
cat $tempfile
#删除临时文件并不输出错误信息
rm -rf $tempfile 2>/dev/null


         即可以永久保存输出副本的同时,也能将输出结果显示给用户。

转载自:https://blog.csdn.net/henni_719/article/details/53642916

You may also like...