shell 是以C语言编写的程序,是用户和操作系统内核之间通信的桥梁
1.shell命令的格式
commond [options] [arguments]
commond: 表示命令的名称
options: 表示命令的选项
arguments: 表示命令的参数
一般在选项钱有一个"-"符号,用于区别参数.
命令的规则:
一个命令行中,可以输入多个命令,各个命令之间用分号隔开;
多行中输入一个命令时,用"\"将一个命令持续到下一行.
2.shell的通配符
bash中常用的通配符有"*","?","[]"
- "*"---匹配任意一个或多个字符
#列出当前目录中所有以.txt结尾的文件(不包含"."开头的文件)
[root@iZ2zegaforshlunfo6xw8qZ ~]# ls *.txt
#将doc 目录下的所有文件复制到/opt目录下
[root@iZ2zegaforshlunfo6xw8qZ ~]# cp doc/* /opt
# 列出/etc目录下的子目录中所有以".conf"结尾的文件,在/etc目录下以".conf"结尾的文件将不会列出
[root@iZ2zegaforshlunfo6xw8qZ ~]# ls -la /etc/*/*.conf
- "?"---匹配任意单一字符
//列出当前目录下以ab开头,随后一个字母是任意字符,接着以".txt"结尾的文件
[root@iZ2zegaforshlunfo6xw8qZ ~]# ls ab?.txt
//列出当前目录下以ab开头,随后两个个字母是任意字符,接着以".txt"结尾的文件
[root@iZ2zegaforshlunfo6xw8qZ ~]# ls ab??.txt
- "[]"---匹配任何包含在方括号内的单字符
//列出在/dev目录下以sda开头,第四个字符是1,2,3,4或5的所有文件
[root@iZ2zegaforshlunfo6xw8qZ ~]# ls /dev/sda[1-5]
- 通配符的组合使用
//列出当前目录下以数字开头,随后一个是任意字符,接着以".conf"结尾的文件
[root@iZ2zegaforshlunfo6xw8qZ ~]# ls [0-9]?.conf
//列出当前目录下以x,y或z开头,最后以".txt"结尾的文件
[root@iZ2zegaforshlunfo6xw8qZ ~]# ls [xyz]*.txt
3.shell的重定向
shell 是根据重定向操作符来决定重定向操作的.
- 输入重定向("<"和"<<"):用于改变命令的输入源,将文件的内容作为命令的输入
// 用wc命令统计输入给它的文件/etc/shadow的行数\单词书和字符数
[root@iZ2zegaforshlunfo6xw8qZ ~]# wc < /etc/shadow
//"<<":当前命令的标准输入来自命令行中一对分隔符之间的内容,分隔符可以是任何内容
[root@iZ2zegaforshlunfo6xw8qZ ~]# wc << aa
> ls -la
> aa
1 2 7
- 输入重定向(">"和">>"):将命令的结果输出到一个指定文件中
//将ps -ef输出的系统运行信息全部输入到text.txt文件中.
[root@iZ2zegaforshlunfo6xw8qZ test1]# ps -ef >test.txt
//将text1.txt和text2.txt的内容全部输出到file中,类似于文件的合并
[root@iZ2zegaforshlunfo6xw8qZ test1]# more test1.txt test2.txt > test.txt
如果在">"后面指定的文件不存在,shell就会自动创建一个;
如果存在,那么这个文件原有的内容将被覆盖;
如果不想覆盖存在的文件,可以使用">>"操作符
- 错误重定向("2>"和"2>>"):实现对错误输出的重定向
# 解压text.tar.gz文件.如果出现错误,则将会把错误信息输出到error.log
[root@iZ2zegaforshlunfo6xw8qZ ~]# tar zxvf text.tar.gz 2> error.log文件
4.shell 的管道(把一个命令的输出当作下一个命令的输入)
//将/etc目录以及子目录的所有文件分屏显示
[root@iZ2zegaforshlunfo6xw8qZ ~]# ls -al /etc/* | more
//查看系统中正在运行httpd进程,并统计httpd的进程数
[root@iZ2zegaforshlunfo6xw8qZ ~]# ps -ef |grep httpd |wc -l
5.shell中的引用
shell中用于引用的字符有转义字符"\",单引号" ' ",双引号" " "
- 转义字符"\"
将"\"放到特殊字符前面,shell就忽略这些特殊字符的原有含义,把它们当作普通字符对待
[root@iZ2zegaforshlunfo6xw8qZ ~]# ls
abc?* C:\backup
//将abc?* 重命名为abc
[root@iZ2zegaforshlunfo6xw8qZ ~]# mv abc\?\* abc
//将C:\backup重命名为backup
[root@iZ2zegaforshlunfo6xw8qZ ~]# mv C\:\\backup backup
- 单引号" ' "
将字符串放到一对单引号之间,那么字符串中所有字符的特殊含义将被忽略
[root@iZ2zegaforshlunfo6xw8qZ ~]# mv C\:\\backup backup
[root@iZ2zegaforshlunfo6xw8qZ ~]# mv 'C:\backup backup'
上面两条命令等价
- 双引号" " "
双引号的引用于单引号基本相同,大部分特殊字符可以当作普通字符处理.
但部分特殊字符即使使用双引号,也仍然保留自己的特殊含义,比如:"$","\","`"
[root@iZ2zegaforshlunfo6xw8qZ ~]# str = "The \$SHELL Current shell is $SHELL"
[root@iZ2zegaforshlunfo6xw8qZ ~]# echo $str
The $SHELL Current shell is /bin/bash
[root@iZ2zegaforshlunfo6xw8qZ ~]# str = "This hostname is `hostname`"
[root@iZ2zegaforshlunfo6xw8qZ ~]# echo $str
This hostname is iZ2zegaforshlunfo6xw8qZ