简介¶
什么是Shell¶
Shell是一个用C语言编写的程序, 它是用户使用Linux的桥梁, 用户通过Shell访问操作系统内核的服务.
注解
Shell也是一个程序, 它的一端连接着用户, 另一端连接着Linux内核, 它是用户和Linux系统沟通的桥梁.
Shell脚本¶
Shell脚本(Shell Script), 是一种为Shell编写的脚本程序; 我们所说的shell通常都是指Shell脚本, 但我们应该知道, Shell和Shell Script是两个不同的概念.
Shell环境¶
Linux的Shell种类众多, 常见的有:
- Bourne Shell(
/usr/bin/sh或/bin/sh) - Bourne Again Shell(
/bin/bash) - C Shell(
/usr/bin/csh) - K Shell(
/usr/bin/ksh) - Shell for Root(
/sbin/sh) - …
bash由于易用和免费, 在日常工作中被广泛使用; 同时, bash也是大多数Linux系统默认的Shell.
在一般情况下, 并不区分Bourne Shell和Bourne Again Shell, 所以像#!/bin/sh同样可以改为#!/bin/bash.
尽管如此, bash和sh还是有一些不同之处:
- 一方面,
bash扩展了一些命令参数;- 另一方面,
bash并不完全和sh兼容, 它们有些行为并不一致.
当前Linux系统可用的Shell都记录在/etc/shells文件中, 这是一个纯文本文件.
可以通过环境变量SHELL查看当前使用的是哪个Shell: echo $SHELL.
第一个Shell脚本¶
#!/usr/bin/env bash
echo "Hello, world"
通常Shell Script的后缀为
.sh, 扩展名并不影响脚本执行, 但使用约定的后缀名可以使得我们见名知意, 通过后缀名知道这是一个Shell脚本;#!是一个约定标记, 告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序;运行shell script有两种方法:
作为解释器的参数
这种方法运行的脚本, 可以不在第一行指定解释器信息;
作为可执行程序(需要给脚本添加执行权限)
小技巧
/bin/bash和/usr/bin/env bash
脚本语言的第一行一般成为shebang, 作用是声明这个脚本程序应该使用哪个解释器去解释它.
/bin/bash声明执行这个脚本时, 使用/bin/bash这个解释器;
/usr/bin/env bash这种写法是为了防止用户没有将bash安装在默认的/bin/路径下; 这种写法是声明, 去env设置里查找bash的安装路径, 再调用相应路径下的解释器来执行程序.推荐使用
/usr/bin/env bash这种写法.
Shell注释¶
以
#开头的行是注释, 会被解释器忽略;Shell中没有多行注释, 只能单行注释;
如果在开发过程中, 遇到大段的代码需要临时注释, 过一会又要取消注释, 怎么办呢?
每一行加个
#太费力了, 可以把这一段要注释的代码用一对花括号括起来, 定义为一个函数, 没有地方调用这个函数, 这块代码就不会执行, 达到了和注释一样的效果.