创建与读写
文件基础操作
空文件创建
要创建空文件,请使用以下语法:
> newfile.name
> 操作员将输出重定向到文件。如果没有给出命令并且文件不存在,它将创建一个空文件。例如,创建一个名为 tarbackup.sh 的 shell 脚本:
#!/bin/bash
TAR=/bin/tar
# SCSI tape device
TAPE=/dev/st0
# Backup dir names
BDIRS="/www /home /etc /usr/local/mailboxes /phpjail /pythonjail /perlcgibin"
# Logfile name
ERRLOG=/tmp/tar.logfile.txt
# Remove old log file and create the empty log file
>$ERRLOG
# Okay lets make a backup
$TAR -cvf $TAPE $BDIRS 2>$ERRLOG
注意,您还可以使用 touch 命令创建空文件:
touch /tmp/newtextfile
文件写入
您需要使用重定向符号 > 将数据发送到文件。例如,我的脚本./payment.py 在屏幕上生成的输出如下:
./payment.py -a -t net >netrevenue.txt
使用 » 重定向符号,将附加到名为 netrevenue.txt 的文件中,输入:
./payment.py -a -t net >>netrevenue.txt
要禁止使用 > 运算符设置 noclobber 选项覆盖现有常规文件,如下所示:
echo "Test" > /tmp/test.txt
set -C
echo "Test 123" > /tmp/test.txt
要使用 > 运算符 set noclobber 选项覆盖现有的常规文件,如下所示:
cat /tmp/test.txt
set +C
echo "Test 123" > /tmp/test.txt
cat /tmp/test.txt
先读后写
创建一个名为 fnames.txt 的文本文件:
vivek
tom
Jerry
Ashish
Babu
现在,按如下所示运行 tr 命令 将所有小写名称转换为大写,然后输入:
tr "[a-z]" "[A-Z]" < fnames.txt
样本输出:
VIVEK
TOM
JERRY
ASHISH
BABU
您可以将输出保存到名为 output.txt 的文件中,输入:
tr "[a-z]" "[A-Z]" < fnames.txt > output.txt
cat output.txt
注意,对于标准输入和标准输出,请不要使用相同的文件名。这将导致数据丢失,并且结果是不可预测的。要对存储在 output.txt 中的名称进行排序,请输入:
sort < output.txt
最后,将所有已排序的命名存储到名为 sorted.txt 的文件中
sort < output.txt > sorted.txt
sort > sorted1.txt < output.txt
指定输出文件的 fd
文件描述符 0、1 和 2 分别保留给 stdin,stdout 和 stderr。但是,bash shell 允许您将文件描述符分配给输入文件或输出文件。这样做是为了提高文件的读取和写入性能。这称为用户定义的文件描述符。您可以使用以下语法将文件描述符分配给输出文件:
exec fd> output.txt
创建一个名为 fdwrite.sh 的 shell 脚本:
#!/bin/bash
# Let us assign the file descriptor to file for output
# fd # 3 is output file
exec 3> /tmp/output.txt
# Executes echo commands and # Send output to
# the file descriptor (fd) # 3 i.e. write output to /tmp/output.txt
echo "This is a test" >&3
# Write date command output to fd # 3
date >&3
# Close fd # 3
exec 3<&-
要将文件描述符分配给输入文件,请使用以下语法:
exec fd< input.txt
创建一个名为 fdread.sh 的 shell 脚本:
#!/bin/bash
# Let us assign the file descriptor to file for input
# fd # 3 is Input file
exec 3< /etc/resolv.conf
# Executes cat commands and read input from
# the file descriptor (fd) # 3 i.e. read input from /etc/resolv.conf file
cat <&3
# Close fd # 3
exec 3<&-