什么是 shell?
shell 是一个命令解释器, 它在操作系统的最外层, 负责直接与用户对话, 把用户的输入解释给操作系统, 并处理各种各样的操作系统的输出结果, 输出到屏幕返回给用户. 这种对话方式可以是交互的方式 (从键盘输入命令, 可以立即得到 shell 的回应), 也可以是非交互(执行脚本程序) 的方式.
什么是 shell 脚本?
当 Linux 命令不在终端下执行(严格说, 命令行执行的语句也是 shell 脚本), 而是通过一个程序文件执行时, 该程序就被称为 shell 脚本. 用户可以在 shell 脚本中敲入一系列的命令或命令语句组合. 这些命令, 变量和流程控制语句等有机的结合起来就形成了一个功能很强大的 shell 脚本.
Shell 环境
Shell 编程跟 java,PHP 编程一样, 只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了. Linux 的 Shell 种类众多, 常见的有:
Bourne Shell(/usr/bin/sh 或 / bin/sh)
是 UNIX 最初使用的 shell, 而且在每种 UNIX 上都可以使用. Bourne Shell 在 shell 编程方面相当优秀, 但在处理与用户的交互方面做得不如其他几种 shell.
Bourne Again Shell(/bin/bash)
Linux 默认的脚本种类, 它是 Bourne Shell 的扩展. 与 Bourne Shell 完全兼容, 并且在 Bourne Shell 的基础上增加了很多特性, 可以提供命令补全, 命令编辑和命令历史等功能.
C Shell(/usr/bin/csh)
是一种比 Bourne Shell 更适合的变种 Shell, 它的语法与 C 语言很相似.
K Shell(/usr/bin/ksh)
集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容.
这里演示用的是 Bash, 也就是 Bourne Again Shell, 由于易用和免费, Bash 在日常工作中被广泛使用. 同时, Bash 也是大多数 Linux 系统默认的 Shell.
在一般情况下, 人们并不区分 Bourne Shell 和 Bourne Again Shell, 所以, 像 #!/bin/sh, 它同样也可以改为 #!/bin/bash.
第一个 shell 脚本
打开文本编辑器(可以使用 vi/VIM 命令来创建文件), 新建一个文件 test.sh, 扩展名为 sh(sh 代表 shell), 内容如下所示:
- #!/bin/bash
- echo "Hello World !"
- #! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序. 运行该脚本, 打印命令 echo 会在屏幕上打印出后面的字符串.
运行 Shell 脚本的两种方法
1, 作为可执行程序
第一种运行方式是, 先使前面的 test.sh 脚本具有执行权限, 然后像运行其它二进制程序一样执行脚本即可:
- chmod +x ./test.sh #使脚本具有执行权限
- ./test.sh #执行脚本
注意, 一定要写成 ./test.sh, 而不是 test.sh, 直接写 test.sh,Linux 系统会去 PATH 里寻找有没有叫 test.sh 的, 而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里, 你的当前目录通常不在 PATH 里, 所以写成 test.sh 是会找不到命令的, 要用 ./test.sh 告诉系统说, 就在当前目录找.
2, 作为解释器参数
第二种运行方式是, 直接运行解释器, 其参数就是 shell 脚本的文件名, 如:
/bin/sh test.sh
这种方式运行的脚本, 不需要在第一行指定解释器信息, 写了也没用.
Shell 注释
1, 单行注释
以 # 开头的行就是注释, 会被解释器忽略, 像这样
- #--------------------------------------------
- # 这是一个注释
- # author:feng
- #--------------------------------------------
- ##### 用户配置区 开始 #####
- #
- # 这里可以添加脚本描述信息
- #
- ##### 用户配置区 结束 #####
如果在开发过程中, 遇到大段的代码需要临时注释起来, 过一会儿又取消注释, 怎么办呢?
每一行加个 #符号太费力了, 可以把这一段要注释的代码用一对花括号括起来, 定义成一个函数, 不调用这个函数, 就不会执行这块代码, 达到了和注释一样的效果.
2, 多行注释
多行注释还可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF 也可以使用其他符号:
:<<'
注释内容...
注释内容...
注释内容...
'
:<<!
注释内容...
注释内容...
注释内容...
!
参考:
Shell 教程 https://www.runoob.com/linux/linux-shell.html
来源: http://www.bubuko.com/infodetail-3110748.html