- 论坛徽章:
- 0
|
好,继续啦
第3章 shell的使用
3.1 命令行结构
最简单的命令就是一个字,比如date,who等
一条命令通常以换行结束,也可以用分号;结束
通常有很多个顺序执行的命令可以用;连接
com1;com2;com3
$ set -x
$ date;who|wc
+ date
Fri Dec 30 11:30:10 CST 2005
+ wc
+ who
1 6 61
注:为了方便看到Shell命令的执行情况,设置了set -x,
输出中以+开头的表示跟踪到的命令执行
;的优先级比较高,所以先执行了date命令,并标准输出;
然后执行who,并通过管道送到wc。
如果需要date和who的输出都送到wc,可以用括号()组合命令
$ (date;who)|wc
+ wc
+ date
+ who
2 12 90
这样date和who的输出被串连成单个数据流,送入管道
tee命令可以将通过管道的数据流截获并放进某个文件。
$ (date;who)|tee tmp|wc
+ tee tmp
+ wc
+ date
+ who
2 12 90
$ more tmp
+ more tmp
Fri Dec 30 11:39:19 CST 2005
root pts/1 Dec 30 08:52
运行tee命令对执行顺序并没有影响,对于管道来说是透明的。
它只是将它的输入复制一份到文件,然后再把输入复制到输出。
另一个命令常用符号&。
&不等命令结束,就将运行的命令放入后台。
用户可以继续与shell交互
$ (sleep 5;date) & date
[1] 7004
+ date
+ sleep 5
Fri Dec 30 11:51:58 CST 2005
$ + date
Fri Dec 30 11:52:03 CST 2005
3.2 元字符
<, >, |, ;和&这些特殊字符,都是由shell来解释的,而不是shell中命令的参数。
在shell中有特殊用途的字符,称为元字符(metacharacter)。
常见的如*代表任何字符串的意思。
不过需要注意,文件名匹配字符串不能匹配以点.开头的的文件名。
以免与.和..相匹配,带来副作用。
$ echo *
+ echo avi rm txt
avi rm txt
$ echo .*
+ echo . .. .bash_logout .bash_profile .bashrc .emacs
. .. .bash_logout .bash_profile .bashrc .emacs
从命令的执行可以看到,由shell解释了*和.*的含义。
而echo程序本身并不了解发生了什么事。
列表一些对于初学者来说,不太常见,但比较有用的元字符:
`...` 运行...中的命令;输出运行结果作为输入
$ `pwd`
++ pwd
+ /home/mysql
-bash: /home/mysql: is a directory
\ \C将C字符作为字符,转义
'...' ...表示文字
"..." 在...中的$、`...`和\得到解释后,将...作为文本文字
p1&&p2 运行p1;若成功,再运行p2
p1||p2 运行p1;若不成功,再运行p2
具体的一些应用和区别,会在后面慢慢讲。
当元字符不作为元字符使用时,可以有几种方法来表示它们。
防止shell解释元字符最简单的办法就是用单引号'...'
$ echo ***
+ echo avi rm txt
avi rm txt
$ echo '***'
+ echo '***'
***
$ echo \*\*\*
+ echo '***'
***
此外也可以用反斜杠\来转义。
而一种引号也可以保护另一种引号
$ echo "Don't do that"
+ echo 'Don'\''t do that'
Don't do that
这里shell解释的时候自动添加了一个\转义。
$ echo x * y
+ echo x avi rm txt y
x avi rm txt y
$ echo x '*' y
+ echo x '*' y
x * y
$ echo x \* y
+ echo x '*' y
x * y
另外可以在一行末尾加入反斜杠\,表示该行未完,这样可以避免shell中的输入行过长
$ ps -ef| \
> grep java\
> |wc
+ grep java
+ wc
+ ps -ef
2 28 441
另外关于echo的一个选项 -n,表示不换行。
$ echo -n haha
+ echo -n haha
haha$
如果要echo出-n。可以使用这样的方式
$echo '-n
>'
+ echo '-n
'
-n
[ 本帖最后由 tanyear 于 2005-12-30 14:44 编辑 ] |
|