什么是Shell?
- Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell
- Shell也是一门编程语言<解释型的编程语言>,即shell脚本
- 一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的
- 一个规范的Shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程一般为:
- #!/bin/bash
-
- 或
-
- #!/bin/sh
注意:
(1)在Shell中如果一行的第一个字母是#,则是注释,但是上面两个是写在第一行,所以不是脚本注释行,如果写在某个命令之后,则变成注释行。
(2)sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。
Shell 脚本的执行方式通常有如下三种
(1)bash script-name 或者 sh script-name;
这是当脚本文件本身没有可执行权限(即文件权限属性x位为-号)时常使用的方法,或者脚本文件开头没有指定解释器时需要使用的方法。推荐使用这种方法。
总结:不用赋予+x权限,而用解释器解释执行 sh helloworld.sh
(2)path/script-name或者./script-name;
指在当前路径下执行脚本(脚本需要有执行权限),需要将脚本文件的权限改为可执行(即文件权限属性为x位)。具体方法为:chmod a+x script-name。然后通过执行脚本绝对路径或者相对路径就可以执行脚本了。
注意:在生产环境中,运维人员由于忘记为该脚本设置可执行权限,然后直接使用,导致出错。因此,推荐第一种 bashscript-name。
linux中执行./xx.sh 与 xx.sh的区别:
./xx.sh执行当前目录中的xx.sh文件
xx.sh,执行名为xx.sh的文件
后者如果在运行之前把.(指当前目录)加入到了环境变量中,且有可执行权限,则可以执行,否则如果如果没有加入环境变量则提示无法找到文件,没执行权限将提示找不到或者权限不够.
换句话说就是 ./xx.sh是执行当前目录下的xx.sh,但是xx.sh是执行%path%\的xx.sh文件
总结:输入脚本的绝对路径或相对路径 首先要赋予+x权限 /root/helloWorld.sh ./helloWorld.sh
(3)source script-name或者. script-name。
source或者“.”命令的功能是:读入脚本并执行脚本,即在当前Shell中执行source或“.”加载并执行的相关脚本文件的命令及语句,而不是产生一个子Shell来执行文件中的命令。
区别:第一种和第二种会新开一个bash,不同bash中的变量无法共享