执行shell脚本的几种方式
shell语言在工作中使用比较广泛,但是学习的话基本上是遇到什么学什么,没有比较系统的学习,记录一下今天的学习情况。
一.shell解释器
首先了解一下shell脚本解释器。顾名思义,shell解释器就是执行shell脚本的解释器。解释器有很多种,比如sh、bash、csh、tcsh、zsh等,最常用的就是sh和bash。
查看命令:
cat /etc/shells 查看系统可使用的shell编译器类型。
cat /etc/passwd 查看当前默认设置,一般在第一行。
实际操作:
可以看到当前系统上有很多种编译器类型。使用which命令可以看到编译器所在位置,/usr/bin/sh是一个链接文件,链接到bash。
所以在编写shell脚本的时候,第一行推荐加上#!/bin/bash或者#!bin/sh,来说明使用哪个编译器。
1.sh和bash的区别
sh 遵循POSIX规范:“当某行代码出错时,不继续往下解释”。bash 就算出错,也会继续向下执行。
POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX )。
POSIX标准意在期望获得源代码级别的软件可移植性。
换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统上编译执行。
举例说明:
sh 脚本:
#!/bin/sh
source err
echo "test sh"
结果为:
test.sh: line 2: source: err: file not found
bash 脚本:
#!/bin/bash
source err
echo "test sh"
结果为:
testsh.sh: 2: testsh.sh: source: not found
test sh
二.执行shell脚本的几种方式
假设test.sh脚本为
#!/bin/bash
echo "test sh"
1 ./test.sh运行
需要有执行test.sh文件的权限,没有权限的话可以使用chmod +x test.sh命令赋权。./的意思是说在当前的工作目录下执行test.sh。如果不加./的话,必须保证当前目录在环境变量PASH中,test.sh才可以执行成功,不然会报错。
2 sh test.sh或者bash test.sh运行
sh和bash都是shell解释器执行,第一部分也讲了它们俩的区别。若是以第二种方式执行,那么,可以不必事先设定shell的执行权限。因为方法二 是将test.sh作为参数传给sh(bash)命令来执行的。这时不是test.sh自己来执行,而是被人家调用执行,所以不要执行权限。
3 . test.sh或者 source test.sh运行
shell环境执行,指的是在当前的shell环境中执行。不需要事先设定shell的执行权限。
参考链接:
https://www.jb51.net/article/161001.htm
https://www.cnblogs.com/EasonJim/p/6850471.html
https://blog.csdn.net/weixin_45606836/article/details/104384870