Shell是一个命令解释器,解释用户对操作系统的操作。将用户输入的命令送到内核。有自己的编程语言对命令进行编辑并组织为程序。
本文内容同微信公众号【凡登】,关注不迷路,学习上高速,欢迎关注共同学习。
可使用cat /etc/shells查看当前系统的shell, 这里我们主要围绕bash讲解
- [@root ~]# cat /etc/shells
- /bin/sh
- /bin/bash
- /usr/bin/sh
- /usr/bin/bash
常见的Shell类型如下:
在一般情况下,并不区分Bourne Shell和Bourne Again Shell,像#!/bin/sh,它同样也可以改为#!/bin/bash。在Linux系统中,Bash是最常用的Shell,因为它的易用性和免费性。同时,Bash也是大多数Linux系统默认的Shell。本系列主要围绕Bash讲解,Bash官网
- # 编写脚本
- [@root ~]# vim test.sh
-
- #!/bin/bash
- echo "Hello World" # 输出: Hello World
-
- # 添加执行权限
- [@root ~]# chmod u+x test.sh
-
- # 执行脚本
- [@root ~]# bash test.sh
- Hello World
由于脚本中的内建命令可能会影响当前环境,所以不同的执行方式,产生的不一样的效果。
以下列举3中不同的执行方式
如何理解子进程、当前进程,以及会影响当前环境?以下示例3种脚本不同执行方式
脚本test.sh内容
- # 编写脚本
-
- #!/bin/bash
- cd /root/data # 进入/root/data目录
- pwd # 输入当前目录
-
- # 执行前查看脚本当前环境目录/root,记住
- [@root ~]# pwd
- /root
- # 执行前查看当前脚本无执行权限
- [@root ~]# ls -l test.sh
- -rw-r--r-- 1 root root 29 10 12 17:33 test.sh
- # 执行脚步
- [@root ~]# bash test.sh
- /root/data
- # 脚本执行过程中的路径已经变成/root/data ,执行后查看还是/root
- [@root ~]# pwd
- /root
说明:bash test.sh 方式执行脚本,通过演示执行脚本前后当前目录均为/root,说明此执行方式不会改变当前环境,
而脚本执行过程中目录由之前的/root 切换为/root/data 确实改变了,说明执行脚本前后不在一个执行环境
- [@root ~]# ./test.sh
- -bash: ./test.sh: 权限不够
- # 添加执行权限
- [@root ~]# chmod u+x test.sh
- -rwxr--r-- 1 root root 29 10 12 17:34 test.sh
- # 再次执行
- [@root ~]# ./test.sh
- /root/data
- # 脚本执行过程中的路径已经变/root/data ,执行后查看还是/root
- [@root ~]# pwd
- /root
说明:执行效果同脚本运行方式一,不同点./test.sh 方式 需要给脚本添加执行权限
- [@root ~]# source test.sh # 或执行 . ./test.sh
- /root/data
- # 脚本执行过程中的路径已经变/root/data ,执行后查看还是/root/data 执行脚本后当前环境路径已经变化
- [@root ~]# pwd
- /root/data
说明:执行脚本前后路径由/root 变为 /root/data 执行过程中和执行后均最终目录均为/root/data 即,表明当前脚本处于同一个运行环境中。
再次感谢您的阅读,欢迎关注微信公众号【凡登】共同学习。