shell的输入与输出
echo
命令
echo string
# echo命令输出转义符以及变量,如$HOME,并且可以让系统执行tty命令
echo "\007your home dictionary is $HOME ,you are connected on 'tty'"
# \c不换行 在Linux中要使用-n来禁止换行
echo -n "..."
# \f进纸
# \t跳格
# \n换行
read
功能
- 可以从键盘或文件的某一行中读入信息,并将其赋予给一个变量。
- shell将空格作为变量之间的分割。
- 可以采用每个read只给一个变量赋值的方法来让输入输出变得更加清晰。
命令
read varible1 varible2 ...
# example1
read name
echo $name
# example2
read name1 name2
echo $name1
echo $name2
# example3
echo "First Name:\c"
read name1
echo "Second Name:\c"
read name2
cat命令
功能
- cat是一个简单而通用的命令,可以用它来显示文件内容,创建文件,还可以用它来显示控制字符。
- 如果希望每次只显示一页,可以用more命令。
命令
cat [options] filename1 ... filename2 ...
# options
# -v用于显示控制符
cat -v file
# 每次只希望显示一页
cat myfile | more
# 同时显示三个文件的内容
cat file1 file2 file3
# 创建一个包含三个文件内容的的file文件
cat file1 file2 file3 > file
# 创建一个新文件并向其中输入一些内容
cat file
# 输入this is great!<CTRL+D>结束输入
- 如果在敲入了cat以后就直接按回车,该命令会等你输入字符。
- 如果你本来就是要输入一些字符,那么它除了会在你输入时在屏幕上显示以外,还会再回显这些内容;最后按结束输入即可。
管道
功能
可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠 |表示。
命令
sed、awk和grep都很适合用管道
cmd1 | cmd2
# 通过管道把cmd1的输出传递给cmd2作为输入
# ls列出的文件传给grep命令,grep命令再在其中寻找quarter1.doc文件
ls | grep quarter1.doc
tee 命令
功能
输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中
命令
可以让不同的命令使用同一个日志文件,不过不要忘记使用 -a选项。
tee -a files
#-a表示追加到文件末尾。
# 将who的输出内容写到who.out中
who | tee who.out
# 让不同的命令输入到同一个日志文件中
sort myfile | tee -a acc.log
myscript | tee -a acc.log
标准输入,输出,错误
exec命令
功能
- exec命令可以用来替代当前shell;使用这一命令时任何现有环境都将会被清除,并重新启动一个shell。
命令
exec cmd
- exec在对文件描述符进行操作的时候(也只有在这时),它不会覆盖你当前的shell。
- 用&来找到文件描述符指向的目标文件
#!/bin/sh
# f_desc
exec 4<&0 0<stock.txt
read line1
read line2
exec 0<&4 # 作为标准输入的文件描述符4被关闭
echo $line1
echo $line2