Shell 是一种解释和执行用户在命令行输入命令的程序. 之所以称为Shell, 是因为它隐藏了操作系统低层的细节.
第一部分
Shell 的种类非常多,常用的主要是3种, 即 Bourne shell(sh), Korn shell(ksh)和 C shell.
要查看目前的Shell 种类或是默认的Shell 种类, 可以在Ubuntu 桌面打开一个终端, 用echo 命令来查询 Shell 环境变量。
代码如下:
echo $SHELL
/bin/bash //目前使用的shell 种类是bash
如果想改变 shell 的种类, 可输入如下:
aduovip@aduovip-desktop:~$sh // 进入shell 切换状态
$bash // 切换到bash
aduovip@aduovip-desktop:~$ash // 切换到ash
$csh // 切换到csh
aduovip@aduovip-desktop:~$ksh // 切换到ksh
$bsh // 切换到bsh
第二部分
Shell 命令基本操作
例如:
ls // 查看当前目录下的文件及文件夹
ls -l // 查看当前目录下的文件及文件夹的详细信息
ls -l /home // 查看/home 目录下的文件及文件夹的详细信息
Shell 常用的特殊符号
1. * 通用符号 例如: ls -l /bin/gh* 含义为 查看/bin/目录下所有以gh开头的文件及文件夹的详细信息
2. ? 类似于*, 但只能表示单个字符, 将上一条命令 * 改为 ? , 含义为: 查看/bin/目录下以gh开头的,文件名长度为3个字符的文件及文件夹的详细信息
3. [] ,指定范围(包含边界), 例如: ls [a-c] 查看当前目录下的文件名为a~c 范围的文件及文件夹
4. ! 取非符号, 需要与[] 符号联合使用,
例如:
aduovip@aduovip-desktop:~/test$ls
a b c d e
aduovip@aduovip-desktop:~/test$ls [!a-c] //表示当前目录下的文件名不为a~c范围的文件及文件夹
d e
5. ; 分隔符号, 用于在一行中输入多个命令时,分隔多个命令
aduovip@aduovip-desktop:~/test$ls;ls-l 查看当前目录下的文件及文件夹,然后查看它们的详细信息
6. ` 命令替代符,这个符号总是成对出现,它们包含的内容在shell 中表示一条命令,并且会被执行.注意该符号不是单引号,使用时和单引号有区别。
aduovip@aduovip-desktop:~/test$echo `ls -l` // 将命令"ls -l" 的结果显示出来
total 0
....
aduovip@aduovip-desktop:~/test$echo 'ls -l' // 这里用单引号, 表示 显示 "ls -l" 这个字符串
ls -l
7 # 符号, 注释符号, 以 # 开头的一行被当作注释处理, 不会被执行.
aduovip@aduovip-desktop:~/test$ # ls -l // 添加上 # 号,该命令被当作注释, 不会执行
aduovip@aduovip-desktop:~/test$
# 符号常常用于shell 脚本中
还有一些常用功能
1. 自动命令补全功能, 按 TAB 键
2. 自动输入历史命令, history // 查看当前的所有历史命令
3. 命令别名机制 alias
例如:
aduovip@aduovip-desktop:~/test$ifconfig // ifconfig 查看网络情况
aduovip@aduovip-desktop:~/test$alias mynet=ifconfig // 将ifconfig 取个别名为mynet, 被赋值在左边
aduovip@aduovip-desktop:~/test$mynet
4. 重定向, 输入输出重定向(IO Redirection) 可以让用户从文件输入命令, 或将输出结果存储在文件及设备中。
输出重定向符号有">" 和">>", 而输入重定向符为 "<".
">" : 将输入的信息直接写入目标文件或设备中,并覆盖掉之前的内容
“>>”: 将输入的信息以追加的方式写入,即写在目标文件或设备的现有内容之后,不会影响原有的内容
使用重定向输出时,如果目标文件不存在, 系统会自动创建.
重定向输入是指输入的内容不通过键盘,而是来自于某一个文件或设备.
5. 管道, | 符号表示,可以将多个简单的命令集合在一起,除了第一个命令和最后一个命令外,每个命令的输出都将作为后一个输入,而每一个命令的输入都来自于前一个命令的输出.
例如:
aduovip@aduovip-desktop:~/test$ls -l | grep test // 管道连接两个命令,将ls -l 的输出作为grep 命令的输入,该操作的目的是查看当前目录下文件名为test 的文件的详细信息
-rw-r--r-- 1 aduovip aduovip 287 2013-01-01 10:00 test