在shell中,可以用几种不同的方式读入数据,如可使用标准输入<缺省为键盘>;或者指定一个文件作为输入输出也是一样,当不指定某个文件作为输出,标准输出总是和终端屏幕相关联,该章主要讲解shell中的输入与输出。
一、输入
shell中的输入,常采用read
◆ 一般形式:read 变量1 变量2 ...
◆ 例子:
# read vari_1 vari_2
abc 123 456
# echo $vari_1
abc
# echo $vari_2
123 456
二、输出
1、echo
◆ 一般形式: echo -option string
◆ 常用参数:
\c 不换行(默认)
\f 进纸
\t 跳格
\n 换行
\e 使转义字符生效
\E 使转义字符失效(默认)
◆ 例子:
# echo -e "ss\n"
ss
#
2、cat
◆ 说明:用于显示文件内容、创建文件、显示控制字符
显示文件内容时,一次行将内容系显示完全,要分页或分屏查看可与more,less等组合使用
◆ 例子:
a、查看文件内容
#cat /etc/passwd | more <按Enter翻页>
#cat -n /etc/group | less <按Enter或方向键翻页,按Ctrl+Z结束> 显示内容时,同时显示行号
#cat a.txt b.txt
b、创建新文件,并输入内容
#cat > group.txt 此时,从键盘输入内容,并按CTRL-D即可结束输入
c、cat还有一个很实用的功能,显示控制字符
#cat -v a.sh
Hello^M <^M就是控制字符>
当我们在windows上编写好脚本后上传至linux后,语法没错误,但执行时,总报错,此时可能就是引入控制字符所致
我们可以通过该功能查看,如带^M,我们可以同UE的转换功能,将DoS转换为Unix格式,再执行
3、管道 |
◆ 说明:可以管道将一个命令的输出传递给下一个命令作为输入,可理解为信息的传输,从这一端传递给另一端
◆ 形式:命令1 | 命令2
◆ 例子:
# 显示当前的登录用户及IP
# who | awk '{print $1 "\t" $6}'
root (10.70.151.79)
oralce (10.71.149.54)
4、tee
◆ 说明:可以用字母T来形象的表示,它将输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中
也就是当你想看到输出的同时,也想将其存入到文件中,此命令非常适合
◆ 形式: tee -a file <-a 表示追加到文件末尾>
◆ 例子:
# pwd | tee path
/root
# cat path
/root
三、文件重定向
1、标准输入、输出和错误
当我们在shell中执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件
文件 | 文件描述符 | 缺省 |
输入文件 --- 标准输入 | 0 | 键盘 |
输出文件 --- 标准输出 | 1 | 屏幕 |
错误输出文件 --- 标准错误 | 2 | 屏幕 |
2、文件重定向
2.1、重定向标准输出
◆ 格式:command > file ; command >> file
◆ 例子:
#cat /etc/group | awk -F: '{print $1}' | sort 1> sort_out 或
#cat /etc/group | awk -F: '{print $1}' | sort > sort_out
#who >> who.txt
◆ 备注:
>:表示覆盖写入
>>:表示追加写入
2.2 、重定向标准输入
◆ 格式:command < file ; command << delimiter ("此处"文档)
◆ 例子:
# sort < sort.txt
# sort < sort.txt > result.txt #将sort.txt进行排序并将结果保存到result.txt文件中
# sort >> result <<jiedingfu 或 sort <<jiedingfu >>result #将从键盘输入的字符进行排序,并将排序后的结果保存到result文件中
> a
> c
> b
> f
> e
> 1
> 3
> 2
> jiedingfu
# cat result
1
2
3
a
b
c
e
f
◆ 备注:
上面这个例子,界定符可以根据个人喜好任意设定,此处为jiedingfu
2.3、重定向标准错误
◆ 例子:
cat exist_file not_exist_file 1>ok_file 2>error_file ,执行结果如下:
在该目录下生成ok_file ; error_file两个文件
ok_file :记录exist_file文件中内容
error_file :记录错误信息"cat: not_exist_file: No such file or directory"
2.4、合并标准输出和标准错误 2>&1
◆ 例子:
cat exist_file not_exist_file >ok_file 2>&1,执行结果:
标准输出和标准错误均记录到ok_file文件中