echo命令可以显示文本行或变量,或者把字符串输入到文件
echo [option] string
-e 解析转义字符
-n 回车但不转行,Linux系统默认回车转行
转义字符(/c /f /n /t)
#!/bin/bash
#echod.sh
echo -e "This echo's 3 new lines/n/n/n"
echo "OK"
echo
echo "This is echo's 3 new lines/n/n/n"
echo "The log files hava been done">mylogfile.txt
read语句可以从键盘或文件的某一行文本中读入信息,并将其赋值给一个变量
read variable1 variable2 ...
如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直到遇到第一个文件结束符或回车;如果给出了多个变
量,他们按顺序分别被赋予不同的变量。shell将用空格作为变量之间的分隔符。
#!/bin/bash
#readname.sh
echo -n "First Name:"
read firstname
echo -n "Last Name:"
read lastname
echo -e "Your First Name is :${firstname}/n"
echo -e "Your Last Name is :${lastname}/n"
cat是一个简单而通用的命令,可以用来显示文件内容,创建文件,还可以用来显示控制字符。
cat [options] filename1 filename2 ...
-v 显示控制字符
使用cat命令时要注意,它不会再文件分页符处停下来:它会一下显示完整个文件。如果希望每次显示一页,可以使用more命令或者把cat命令的输出通过管道传递到另一个具有分页功能的命令(more,less)中
man cat
$ cat myfile1
$ cat myfile1 myfile2 myfile3
$ cat myfile1 myfile2 myfile3>myfile
$ cat -v dos.txt
管道|
可以通过管道把一个命令的输出传递给另一个命令作为输入。
$ cat myfile|more
$ ls -l |grep "myfile"
$ df -k |awk '{print $1}' |grep -v "Filesystem"
tee命令把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。
tee -a files
如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。
一般用于管道之后。
$ who |tee -a who.out
$ df -k|awk '{print $1}'|grep -v "Filesystem"|tee partation.txt
标准输入、输出和错误
在shell中执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。
输入0
输出1
错误输出2
系统中实际上有12个文件描述符,可以任意使用文件描述符3到9。
文件重定向
改变程序运行的输入来源和输出地点
cmd > file 把标准输出重定向到一个新文件
cmd >> file 把标准输出重定向到一个文件中(追加)
cmd 1 > file 把标准输出重定向到一个新文件
cmd > file 2>&1 把标准输出和标准错误一起重定向到一个文件中
cmd 2 > file 把标准错误重定向到一个文件中
cmd 2 >> file 把标准输出重定向到一个文件中(追加)
cmd >> file 2&1 把标准输出和标准错误一起重定向到一个文件中(追加)
cmd <file > file2 cmd命令以file文件作为标准输入,以file2文件作为标准输出
cmd < file cmd命令以file文件作为标准输入
cmd <<delimiter 从标准输入中读入,直至遇到delimiter分界符
cmd <&m 把文件描述符m作为标准输入
cmd >&m 把标准输出重定向到文件描述符m中
cmd <&- 关闭标准输入
重定向标准输出
$ cat file |sort 1>sort.out
$ cat file |sort >sort.out
$ pwd >>path.out
$ >nullfile.txt
重定向标准输入
$ sort <file
$ sort <name.txt>name.out
$ cat >>term.txt<<domingo
>Hello,there i am using a $TERM terminal
>and my username is $LOGNAME
>bye...
>chinaitlab
>domingo
$ cat term.txt
Hello,there i am using a xterm terminal
and my username is domingo
bye...
chinaitlab
重定向标准错误
$ grep "trident" missiles
grep:missiles:No such file or directory
$ grep "trident" missiles 2>/dev/null
结合使用标准输出和标准错误
$ cat account_new.txt account_old.txt 1>account.out 2>account.err
合并标准输出和标准错误
合并标准输出和标准错误的时候,切记shell是从左至右分析相应的命令
$ grep "stanard" standard.txt >grep.out 2>&1
exec命令可以用来替代当前shell;换句话说,并没有启动子shell,使用这一命令时任何现有环境都会被消除,并重新启动一个shell。
exec command
其中command通常是一个shell脚本
对文件描述符进行操作的时候(也只有在这时),它不会覆盖当前的shell
3-9文件描述符
exec与文件描述符的结合
$ cat name.txt
Lucy
Jonh
$ cat file_desc.sh
#!/bin/bash
#file_desc.sh
exec 3<&0 0<name.txt
read line1
read line2
exec 0<&3
echo $line1
echo $line2
$./file_desc.sh
Lucy
Jonh