创建与读写

文件基础操作

空文件创建

要创建空文件,请使用以下语法:

> 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<&-
上一页