

第五章 Shell基础
5.1 Shell 概述
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
简单来说:shell编程是将Linux命令的逻辑化处理。
5.1.1 Shell分类
| Shell分类 | 易学性 | 可移植性 | 编辑性 | 快捷性 |
|---|---|---|---|---|
| Bourne Shell (sh) | 容易 | 好 | 较差 | 较差 |
| Korn Shell (ksh) | 较难 | 较好 | 好 | 较好 |
| Bourne Again (Bash) | 难 | 较好 | 好 | 好 |
| POSIX Shell (psh) | 较难 | 好 | 好 | 较好 |
| C Shell (csh) | 较难 | 差 | 较好 | 较好 |
| TC Shell (tcsh) | 难 | 差 | 好 | 好 |
linux的标准shell是Bash。
5.2 Shell脚本执行方式
5.2.1 echo命令
[root@localhost ~]# help echo
echo: echo [-neE] [参数 ...]
将参数写到标准输出。
在标准输出上,显示用空格分割的 ARG 参数后跟一个换行。
选项:
-n 不要追加换行
-e 启用下列反斜杠转义的解释
-E 显式地抑制对于反斜杠转义的解释
`echo' 对下列反斜杠字符进行转义:
\a 警告(响铃)
\b 退格
\c 抑制更多的输出
\e 转义字符
\f 换页字符
\n 换行
\r 回车
\t 横向制表符
\v 纵向制表符
\\ 反斜杠
\0nnn 以 NNN (八进制)为 ASCII 码的字符。NNN 可以是 0 到 3 个八进制位
\xHH 以 HH (十六进制)为值的八按位字符。HH可以是一个或两个十六进制位
退出状态:
返回成功除非有写错误发生。
5.2.2 Shell脚本的执行
以一个shell脚本为例,
#!/bin/bash
#The first program
#Author:HQS
echo -e "朋友们大家好,我是浑元形意太极拳掌门人马保国!"
我们将该脚本保存为demoShell.sh的文件。运行一下该脚本,首先,需要在运行前赋予权限:
[root@localhost hqs]# chmod 755 demoShell.sh
[root@localhost hqs]# ll demoShell.sh
-rwxr-xr-x. 1 root root 126 11月 25 16:59 demoShell.sh
目前已经赋予了执行权限。可以通过绝对路径的方式运行,如下:
[root@localhost hqs]# /root/hqs/demoShell.sh
朋友们大家好,我是浑元形意太极拳掌门人马保国!
也可以通过相对路径的方式进行运行
[root@localhost hqs]# ./demoShell.sh
朋友们大家好,我是浑元形意太极拳掌门人马保国!
同样的,也可以通过使用bash的方式运行程序
[root@localhost hqs]# bash demoShell.sh
朋友们大家好,我是浑元形意太极拳掌门人马保国!
5.3 bash的基本功能
5.3.1 历史命令 history
历史命令查看
通过输入history命令就可以查看历史中输入过的命令,如下所示:
[root@localhost hqs]# history
1 vim
2 setup
3 vi
4 ls
5 mkdir hqs
6 ls
7 cd hqs
8 alias vi='vim'
9 vi /ect/fastab
10 cd ~
11 vi.bashrc
12 vi .bashrc
13 vi
14 clear
15 cd hqs
16 ls
17 cat englishText.txt
18 cat mabaoguo.txt
19 clear
20 cat mabaoguo.txt
(未显示完全)
当前使用的history命令所得到的结果和~./bash_history文件中的保存的历史命令式不同的,保存在后者中的命令是当前用户注销后系统将缓存中的命令写入到其中的。如果不等到用户注销时再写入,可以使用 -w 选项。
[root@localhost hqs]# history -w
清空历史命令使用 -c选项
[root@localhost hqs]# history -c
历史命令调用
调用历史命令有以下几种方法:
使用上、下箭头调用历史命令。 使用 !n 重复执行第n条历史命令。 使用 !! 重复执行上一条命令。 使用 !字串 重复执行最后一条以该字串开头的命令。 使用 !$ 重复上一条命令的最后一个参数。
5.3.2 bash常用快捷键
| 快捷键 | 快捷键说明 |
|---|---|
| CTRL+A | 将光标移到行首(在命令行下) |
| CTRL+C | 中断,终结一个前台作业。 |
| CTRL+E | 将光标移动到行尾(在命令行下) |
| CTRL+L | 清屏,相当于clear |
| CTRL+U | 擦除从光标位置开始到行首的所有字符内容。在某些设置下,CTRL-U会不以光标位置为参考而删除整行的输入。 |
| CTRL+K | 擦除(Rubout)(破坏性的退格)。在光标往回移动的时候,同时擦除光标前的一个字符。 |
| CTRL+Y | 将之前已经清除的文本粘贴回来(主要针对CTRL-U或CTRL-W)。 |
| CTRL+R | 回溯搜索(Backwards search)history缓冲区内的文本(在命令行下)。注意:按下之后,提示符会变成(reverse-i-search)”:输入的搜索内容出现在单引号内,同时冒号后面出现最近最匹配的历史命令。 |
| CTRL+D | 退出当前终端 |
| CTRL+Z | 暂停,并放入后台。 |
| CTRL+S | 暂停屏幕输出。 |
| CTRL+Q | 恢复屏幕输出。 |
5.3.3 输入输出重定向
| 命令 | 说明 |
|---|---|
| command > file | 将输出重定向到 file。 |
| command < file | 将输入重定向到 file。 |
| command >> file | 将输出以追加的方式重定向到 file。 |
| n > file | 将文件描述符为 n 的文件重定向到 file。 |
| n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
| n >& m | 将输出文件 m 和 n 合并。 |
| n <& m | 将输入文件 m 和 n 合并。 |
| << tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
❝需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
❞
统计相关命令
[root@localhost hqs]# wc [选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
5.3.4 多命令顺序执行
| 多命令执行符 | 格式 | 作用 |
|---|---|---|
| ; | 命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
| && | 命令1 && 命令2 | 两个命令在命令1执行「正确」的情况下才执行命令2,否则不会执行命令2 |
| || | 命令1|| 命令2 | 两个命令在命令1执行「错误」的情况下才执行命令2,否则不会执行命令2 |


文章转载自哦呦明知山有虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




