LINUX-Shell输入与输出

时间:2021-02-02 09:11:00

http://fhqdddddd.blog.163.com/blog/static/186991542012417104144188/

echo
使用echo命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为:
echo string
echo命令有很多功能,其中最常用的是下面几个:
\c 不换行。
\f 进纸。
\t 跳格。
\n 换行。

linux中使用转义符时,需要使用-e参数,否则转义符不生效
# echo -e “aaa \n bbb”
aaa
 bbb
# echo “aaa \n bbb”
aaa \n bbb

可以用echo输出系统变量,或者系统命令的结果
# echo “my home is : $HOME”
my home is : /root

# echo “The time is : `date`”
The time is : Sun Jun 13 13:03:47 CST 2010

注意date命令两边的符号不是单引号!

引号是一个特殊字符,所以必须要使用反斜杠\来使shell忽略它的特殊含义
# echo “\”/dev/rmt0″\”
“/dev/rmt0″

read
使用r e a d语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只指定了一个变量,那么r e a d

将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。

read varible1 varible2 …
例如:
# read firstname lastname
Arthur MR Liu
# echo $firstname
Arthur
# echo $lastname
MR Liu

cat

cat是一个简单而通用的命令,可以用它来显示文件内容,创建文件,还可以用它来显示控制字符。

cat命令的一般形式为:
cat [options] filename1 … filename2 …
cat命令最有用的选项就是:
-v 显示控制字符
显示文件
$ cat myfile
创建文件
$ cat > myfile
结束按< C T R L – D >

合并文件
$ cat myfile1 myfile2 myfile3 > bigfile
管道
可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠|表示。

命令1 |命令2
其中|是管道符号。

sed、awk和grep都很适合用管道,特别是在简单的一行命令中。在下面的例子中, who命令的输出通过管道传递给awk命令,以便只显示用户名和所在的终端。
# who | awk ‘{print $1″\t”$2}’
root    pts/1

# df -k | awk ‘{print $1}’ | grep -v “Filesystem”
/dev/mapper/VolGroup00-LogVol00
8030648
/dev/sda1
tmpfs
tee
t e e命令作用可以用字母T来形象地表示,即水管中的三通。
# who | tee who.out
root     pts/1        2010-06-13 11:45 (192.168.164.1)
# cat who.out
root     pts/1        2010-06-13 11:45 (192.168.164.1)

标准输入输出
输入文件—标准输入0
输出文件—标准输出1
错误输出文件—标准错误2

为什么会有一个专门针对错误的特殊文件?这是由于很多人喜欢把错误单独保存到
一个文件中,特别是在处理大的数据文件时,可能会产生很多错误。

command > filename 把把标准输出重定向到一个新文件中
command >> filename 把把标准输出重定向到一个文件中(追加)
command 1 > fielname 把把标准输出重定向到一个文件中
command > filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把把标准错误重定向到一个文件中
command 2 >> filename 把把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把command命令以f i l e n a m e文件作为标准输入,以f i l e n a m e 2文件为标准输出
command < filename 把command命令以f i l e n a m e文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到d e l i m i t e r分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入

cat passwd | awk -F: ‘{print $1}’ | sort >sort.out

root将收到一个邮件,其中含有文件contents.txt中的内容:
#mail root < contents.txt

重定向操作符command << delimiter是一种非常有用的命令,通常都被称为“此处”文挡。
shell将分界符d e l i m i t e r之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符,

shell就知道输入结束了# cat >> myfile1 << EOF
> aaa
> bbb
> ccc
> eof
> EOF
# cat myfile1
aaa
bbb
ccc
eof
# grep “standard” > grep.out 2>&1
在上面的例子中, grep命令的标准输出和标准错误都被重定向到grep.out文件中
exec
exec命令可以用来替代当前shell
exec命令的一个常见用法就是在用户的.profile最后执行时,用它来执行一些用于增强安全性的脚本。

文件描述符
可以理解为文件的代号

# vi readtest
exec 4<&0 0<myfile1
read line1
read line2
exec 0<&4
echo $line1
echo $line2

# cat myfile1
aaa
bbb
ccc
eof

# chmod 744 readtest
# ./readtest
aaa
bbb