1、认识Linux shell
Shell是一个命令解释器,是介于操作系统内核与用户之间的一个纽带。准确地说,它也是能力很强的计算机语言,被称为解释性语言或脚本语言。它可以通过将系统调用、公共程序、工具和编译过的二进制程序”粘合“在一起来建立应用,这是大多数脚本语言的共同特征,所以有时候脚本语言又叫做“胶水语言”。
Bash(GNU Bourne-Again Shell)是一个为GNU计划编写的Unix shell,它是许多Linux平台默认使用的shell。 实际上在众多的Linux发行版本中shell有很多个版本,当然不同的Linux发行版也有着区别,本文本以Centos 6.9为例,主要说明Bash Shell。
2、Bash简单事例
1. 入门必学的“Hello world”和echo
命令
[root@centos6 opt]# vim hello.sh
使用vim编辑器新建一个hello.sh的文件,并写入如下代码:
1. #!/bin/bash
2. # This is a test for 'hello world'.
3. echo "Hello World" #方法1
4. echo 'Hello World' #方法2
5. echo Hello World #方法3
- 在vim中插入按i,保存并退出换行按esc然后输入
:wq
再enter或者:x
再enter- #! 是说明 hello 这个文件的类型的,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。
- Linux 系统根据 "#!" 及该字串后面的信息确定该文件的类型,可以通过
man magic命令 及 /usr/share/magic 文件来了解这方面的更多内容。在 BASH 中 第一行的 "#!" 及后面的 /bin/bash 就表明该文件是一个 BASH 程序,需要由 /bin 目录下的 bash 程序来解释执行。BASH 这个程序一般是存放在 /bin 目录下,如果你的 Linux 系统比较特别,bash 也有可能被存放在 /sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或 /usr/local/sbin 这样的目录下;如果还找不到,你可以用 locate bash ,find / -name bash 2>/dev/null 或 whereis bash 这三个命令找出 bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个 BASH 软件包了。- 第二行的 "# This is a ..." 就是 BASH 程序的注释,在 BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的部分均被看作是程序的注释。
- 第三行的 echo 语句的功能是把 echo 后面的字符串输出到标准输出中去。由于 echo 后跟的是 "Hello World" 这个字符串,因此 "Hello World"这个字串就被显示在控制台终端的屏幕上了。需要注意的是 BASH 中的绝大多数语句结尾处都没有分号。
- 这里的第3、4、5行有着类似的输出,分别使用双引号·" "·,单引号
' '
,以及不使用引号。
echo是用于终端打印的基本命令。在默认情况下, echo在每次调用后会添加一个换行符。只需要使用带双引号(或者单引号或者不带引号)的文本,结合echo命令就可以将该文本在终端中打印出来。当然双引号、单引号、不带引号在上面的例子中看起来输出正常,但实际是有区别的。
2. 高级终端打印printf
命令
#!/bin/bash
#文件名: printf.sh
printf "%-5s %-10s %-4s\n" No Name Mark
printf "%-5s %-10s %-4.2f\n" 1 Sarath 90.3456
printf "%-5s %-10s %-4.2f\n" 2 James 80.9989
printf "%-5s %-10s %-4.2f\n" 3 Jeff 77.564
- 这是一组打印命令实际上生成了一个很整体的文本,printf命令实际上是格式化并输出结果到标准输出的一个命令,从上面的例子可以很清楚的看到他的用法和作用,当打印大量数据时如不使用格式化显示将无法阅读。
- 格式替代符
%b 相对应的参数被视为含有要被处理的转义序列之字符串。
%c ASCII字符。显示相对应参数的第一个字符
%d, %i 十进制整数
%e, %E, %f 浮点格式
%g %e或%f转换,看哪一个较短,则删除结尾的零
%G %E或%f转换,看哪一个较短,则删除结尾的零
%o 不带正负号的八进制值
%s 字符串
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,使用a至f表示10至15
%X 不带正负号的十六进制值,使用A至F表示10至15
%% 字面意义的%
- 转义序列
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车(Carriage return)
\t 水平制表符
\v 垂直制表符
\\ 一个字面上的反斜杠字符
\ddd 表示1到3位数八进制值的字符,仅在格式字符串中有效
\0ddd 表示1到3位的八进制值字符`
3、bash的运行方式
- 使用shell执行 *.sh文件
sh helloo.sh
- 使用bash执行 *.sh文件
bash hello.sh
- 使用
.
来执行 *.sh文件
$ . ./hello.sh
- 使用source来执行 *.sh文件
source hello.sh
- 给某一用户权限,允许用户直接执行 *.sh文件
在`某一用户`下使用如下命令
$ chmod u+rx hello.sh
$ ./hello.sh