您的位置:首页 > 运维架构 > Shell

shell-输入和输出-shell编程笔记3

2011-02-21 16:24 190 查看
1、 echo命令可以显示文本行或变量,或者把字符串输入到文件。
echo [option] string --命令格式
-e 解析转义字符
-n 回车不换行,linux系统默认回车换行
转义符(\c,\f,\t,\n)
例子:关于echo的脚本,注意观察其中的字符和参数的使用。
#!/bin/bash
#echod
echo -e "This echo's 3 new lines\n\n\n"
echo "OK"
echo
echo "This echo's 3 new lines\n\n\n"
echo "The log files have all been done">mylogfile.txt
执行这个脚本的结果应该是:
#./echod
This echo's 3 new lines

OK

This echo's 3 new lines\n\n\n
和mylogfile.txt文件中的:The log files have all been done
2、 read语句可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。
read varible1 varible2 ……命令格式
如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车;如果给出了多个变量,它们按顺序分别被赋予不同的变量。Shell将用空格作为变量之间的分隔符。
例子:关于read的脚本:
#!/bin/bash
#readname
echo -n "First name :"
read Firstname
echo -n "Last name :"
read Lastname Subname Thirdname
echo -e "Your firstname is:${Firstname}\n"
echo -e "Your lastname is:${Lastname}\n"
echo -e "Your subname is:${Subname}\n"
echo -e "Your Thirdname is:${Thirdname}\n"
3、 cat是一个简单而且通用的命令,可以用它来显示文件内容、创建文件,还可以用它来显示控制字符。
Cat [option] filename1 filename2 ……命令格式
-v 显示控制字符
使用cat命令时要注意,它不会再文件分页符处停下来;他会一下显示完整个文件。如果希望每次显示一页,可以用more命令或把cat命令的输出通过管道传递到另外一个具有分页功能的命令(more,less)中。
Man cat
列子:#cat myfile
#cat mafile1 myfile2 myfile3
#cat mafile1 myfile2 myfile3 >myfile
#cat –v dos.txt
4、 管道 ( | )可以把一个命令的输出传递给另一个命令作为输入。
格式:command1 | command2
例子:#cat myfile | more
#ls –l | grep “myfile”
#df -k | awk '{print $1}' | grep -v "Filesystem" | tee [-a] partation.txt
5、 tee 命令把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。
tee –a files--------命令格式
---如果希望看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。
---一般用于管道之后。
例子:#who | tee –a who.out -a 这个参数是追加的意思,不加的话直接覆盖原有文件。
# df -k | awk '{print $1}' | grep -v "Filesystem" | tee [-a] partation.txt
6、 标准输入、输出和错误:在shell中执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。

文件文件描述符
输入文件—标准输入0(缺省时键盘,也可以是文件或其他命令的输出)
输出文件—标准输出1(缺省时屏幕,也可以是文件)
错误输出文件—标准错误2(缺省时屏幕,也可以是文件)
系统中实际上有12个文件描述符,可以任意使用文件描述符3到9.
7、 文件重定向:改变程序运行的输入来源和输出地点。

Command > filename把标准输出重定向到一个新文件中
Command >> filename把标准输出重定向到一个新文件中(追加)
Command 1 > filename把标准输出重定向到一个文件中
Command > filename 2>&1把标准输出和标准错误一起重定向到一个文件中
Command 2 > filename把标准错误重定向到一个文件中
Command 2 >> filename把标准错误重定向到一个文件中(追加)
Command >> filename 2>&1把标准输出和标准错误一起重定向到一个文件中(追加)
Command < filename > filename2Command命令以filename文件作为标准输入,以filename2作为标准输出
Command < filenameCommand命令以filename文件作为标准输入
Command << delimiter从标准输入中读入,直至遇到delimiter分界符
Command <&m把文件描述符m作为标准输入
Command >&m把标准输出重定向到文件描述符m中
Command <&关闭标准输入
例子:#cat file | sort 1 > sort.out 等同于#cat file | sort > sort.out
#pwd >> path.out
#>nullfile.txt 清空文件nullfile.txt 也可以理解为创建一个空文件。
#sort < file
#sort < name.txt > name.out
#cat >>term.txt<<CHINAITLAB
>Hello,there I am using a $TERM terminal
>and my username is $LOGNAME
>bye...
>CHINAITLAB //这个命令是delimiter的相关用法和追加的例子
#cat term.txt
#grep “trident” missiles 2 > /dev/null //标准错误的输出
8、 结合使用标准输出和标准错误
例子:#cat account_new.txt account_old.txt 1 > account.out 2 > account.err
#cat account.out
#cat account.err //这个例子假设account_new.txt存在,而account_old.txt不存在
9、 合并标准输出和标准错误:合并标准输出和标准错误的时候,切记shell是从左至右分析相应的命令的。
例子:#grep “standard” standard.txt > grep.out 2 >&1 //不管怎么样,结果都输出到grep.out这个文件中。
10、 exec命令可以用来替代当前shell;换句话说,并没有启动子shell,使用这一命令时任何现有环境都会被清除,并重新启动一个shell。
exec command //其中的command通常是一个shell脚本
--对文件描述符进行操作的时候(也只有在这时),它不会覆盖当前的shell。
例子:#exec ./helloword.sh //实验一下 ,hellword.sh是一个脚本
11、 文件描述符
--3-9文件描述符,exec与文件描述符的结合
例子:#!/bin/bash
#file_desc
exec 3<&0 0<name.txt // exec 3<&0打开文件描述符
read line1
read line2
exec 0<&3 //关闭文件描述符
echo $line1
echo $line2 //编辑一个这样的脚本测试exec与文件描述符的结合是否会覆盖当前的shell。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: