Shell脚本执行的几种方式小结
Shell脚本执行的几种方式
前面两种是通过创建子shell进程来解释执行脚本。父shell可能获取不到子shell的一些环境变量。
source是在当前shell进程里面直接执行。
父子shell的演示
- 创建子shell进程
bash命令创建子shell进程
ps -ef|grep bash 查看shell进程
[root@localhost ~]# ps -ef|grep bash root 864 1 0 6月27 ? 00:00:00 /bin/bash /usr/sbin/ksmtuned root 1965 1949 0 6月27 tty1 00:00:02 -bash root 3449 3433 0 00:09 pts/0 00:00:00 -bash root 3496 3449 0 00:10 pts/0 00:00:00 grep --color=auto bash [root@localhost ~]# bash [root@localhost ~]# ps -ef|grep bash root 864 1 0 6月27 ? 00:00:00 /bin/bash /usr/sbin/ksmtuned root 1965 1949 0 6月27 tty1 00:00:02 -bash root 3449 3433 0 00:09 pts/0 00:00:00 -bash root 3505 3449 0 00:10 pts/0 00:00:00 bash root 3534 3505 0 00:10 pts/0 00:00:00 grep --color=auto bash [root@localhost ~]# bash [root@localhost ~]# ps -ef|grep bash root 864 1 0 6月27 ? 00:00:00 /bin/bash /usr/sbin/ksmtuned root 1965 1949 0 6月27 tty1 00:00:02 -bash root 3449 3433 0 00:09 pts/0 00:00:00 -bash root 3505 3449 0 00:10 pts/0 00:00:00 bash root 3535 3505 0 00:10 pts/0 00:00:00 bash root 3566 3535 0 00:11 pts/0 00:00:00 grep --color=auto bash
可以看到,第一次执行bash后,创建了个父进程是3499的子进程;第二次执行bash后,创建两个父进程是3505(第一次创建的进程)的子进程。
- 退出子shell进程
exit 退出子shell进程
[root@localhost ~]# ps -ef|grep bash root 864 1 0 6月27 ? 00:00:00 /bin/bash /usr/sbin/ksmtuned root 1965 1949 0 6月27 tty1 00:00:02 -bash root 3449 3433 0 00:09 pts/0 00:00:00 -bash root 3505 3449 0 00:10 pts/0 00:00:00 bash root 3535 3505 0 00:10 pts/0 00:00:00 bash root 3566 3535 0 00:11 pts/0 00:00:00 grep --color=auto bash [root@localhost ~]# exit exit [root@localhost ~]# ps -ef|grep bash root 864 1 0 6月27 ? 00:00:00 /bin/bash /usr/sbin/ksmtuned root 1965 1949 0 6月27 tty1 00:00:02 -bash root 3449 3433 0 00:09 pts/0 00:00:00 -bash root 3505 3449 0 00:10 pts/0 00:00:00 bash root 3616 3505 0 00:17 pts/0 00:00:00 grep --color=auto bash [root@localhost ~]# exit exit [root@localhost ~]# ps -ef|grep bash root 864 1 0 6月27 ? 00:00:00 /bin/bash /usr/sbin/ksmtuned root 1965 1949 0 6月27 tty1 00:00:02 -bash root 3449 3433 0 00:09 pts/0 00:00:00 -bash root 3626 3449 0 00:17 pts/0 00:00:00 grep --color=auto bash
1. 创建shell脚本hello.sh
在/home目录下创建文件夹jiaoben,在文件夹里面创建hello.sh文件
[root@localhost home]# mkdir jiaoben [root@localhost home]# cd jiaoben/ [root@localhost jiaoben]# ll 总用量 0 [root@localhost jiaoben]# touch hello.sh [root@localhost jiaoben]# vi hello.sh [root@localhost jiaoben]# ll 总用量 4 -rw-r--r--. 1 root root 26 6月 27 23:29 hello.sh
hello.sh的内容为
#!/bin/bash echo "Hello!"
脚本以 #!/bin/bash 开头,指定shell解析器
2. bash/sh 脚本的绝对路径/相对路径
不管脚本有没有x(可执行)权限,都可以执行。
2.1 sh 脚本的相对路径执行脚本
[root@localhost jiaoben]# pwd /home/jiaoben [root@localhost jiaoben]# sh hello.sh Hello!
2.2 sh 脚本的绝对路径执行脚本
[root@localhost jiaoben]# sh /home/jiaoben/hello.sh Hello!
2.3 bash 脚本的相对路径执行脚本
[root@localhost jiaoben]# bash hello.sh Hello!
2.4 bash 脚本的绝对路径执行脚本
[root@localhost jiaoben]# bash /home/jiaoben/hello.sh Hello!
3. 脚本的绝对路径/相对路径(需要脚本的+x权限)
3.1 脚本的相对路径执行脚本
./hello.sh
[root@localhost jiaoben]# pwd /home/jiaoben [root@localhost jiaoben]# ll 总用量 4 -rw-r--r--. 1 root root 26 6月 27 23:29 hello.sh [root@localhost jiaoben]# ./hello.sh -bash: ./hello.sh: 权限不够 [root@localhost jiaoben]# chmod +x hello.sh [root@localhost jiaoben]# ./hello.sh Hello! [root@localhost jiaoben]# ll 总用量 4 -rwxr-xr-x. 1 root root 27 6月 27 23:38 hello.sh [root@localhost jiaoben]# ./hello.sh Hello!
从上面可以看到,执行./hello.sh需要x权限
3.2 脚本的绝对路径执行脚本
/home/jiaoben/hello.sh
- 收回hello.sh的x(可执行)权限,然后执行脚本
[root@localhost jiaoben]# chmod -x hello.sh [root@localhost jiaoben]# ll 总用量 4 -rw-r--r--. 1 root root 27 6月 27 23:38 hello.sh [root@localhost jiaoben]# /home/jiaoben/hello.sh -bash: /home/jiaoben/hello.sh: 权限不够
- 给脚本hello.sh添加x(可执行)权限,通过脚本绝对路径再执行脚本
[root@localhost jiaoben]# chmod +x hello.sh [root@localhost jiaoben]# ll 总用量 4 -rwxr-xr-x. 1 root root 27 6月 27 23:38 hello.sh [root@localhost jiaoben]# /home/jiaoben/hello.sh Hello!
4. source 脚本的绝对路径/相对路径执行脚本
source执行脚本时,不管脚本有没有x(可执行权限),脚本都可以执行我们平时配置完环境变量,用的就是source执行,如source /etc/profile
4.1 source相对路径执行脚本
source hello.sh
[root@localhost jiaoben]# ll 总用量 4 -rwxr-xr-x. 1 root root 27 6月 27 23:38 hello.sh [root@localhost jiaoben]# source hello.sh Hello!
4.2 source绝对路径执行脚本
source /home/jiaoben/hello.sh
[root@localhost jiaoben]# ll 总用量 4 -rwxr-xr-x. 1 root root 27 6月 27 23:38 hello.sh [root@localhost jiaoben]# source /home/jiaoben/hello.sh Hello!
hello.sh没有x(可执行)权限时候,使用source执行情况:
[root@localhost jiaoben]# chmod -x hello.sh [root@localhost jiaoben]# ll 总用量 4 -rw-r--r--. 1 root root 27 6月 27 23:38 hello.sh [root@localhost jiaoben]# source hello.sh Hello! [root@localhost jiaoben]# source /home/jiaoben/hello.sh Hello!
5. .空格脚本的绝对路径/相对路径执行脚本
.空格绝对路径/相对路径执行脚本时候,不管脚本有没有x(可执行)权限,都可以执行。
下面我们李子都使用没有x(可执行)权限的x脚本来验证。
5.1 .空格脚本的相对路径执行脚本
. hello.sh
[root@localhost jiaoben]# ll 总用量 4 -rw-r--r--. 1 root root 27 6月 27 23:38 hello.sh [root@localhost jiaoben]# . hello.sh Hello!
5.2 .空格脚本的绝对路径执行脚本
[root@localhost jiaoben]# ll 总用量 4 -rw-r--r--. 1 root root 27 6月 27 23:38 hello.sh [root@localhost jiaoben]# . /home/jiaoben/hello.sh Hello!
到此这篇关于Shell脚本执行的几种方式小结的文章就介绍到这了,更多相关Shell 脚本执行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
使用Linux shell脚本实现FTP定时执行批量下载指定文件
使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示,需要的朋友参考下吧2017-04-04linux shell中 if else以及大于、小于、等于逻辑表达式介绍
在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下,方便需要的朋友2013-02-02
最新评论