bash Shell 编程练习 初步了解脚本的运行方式

本文详细解析了在Linux环境下如何执行脚本,包括使用source、bash、直接执行及不同执行方式对进程树的影响。通过具体示例,展示了脚本执行的各种方法及它们之间的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、编写第一个脚本source运行脚本
编辑sh01.sh
[root@linux1 sh]# vi sh01.sh
echo 1111
echo 'niu'
ls /
ll
echo $$
查看sh01.sh
[root@linux1 sh]# cat sh01.sh
echo 1111
echo 'niu'
ls /
ll
echo $$
运行sh01.sh
[root@linux1 sh]# source sh01.sh
1111
niu
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
total 4
-rw-r--r--. 1 root root 37 Feb 21 15:42 sh01.sh
6855
2、变成可执行文件
[root@linux1 sh]# chmod +x sh01.sh
看到bash id 发生了变化
[root@linux1 sh]# ./
-bash: ./: is a directory
[root@linux1 sh]# ./sh01.sh
1111
niu
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
./sh01.sh: line 4: ll: command not found
6890
3、使用bash 运行
去掉可执行文件
[root@linux1 sh]# chmod -x sh01.sh

[root@linux1 sh]# ll
total 4
-rw-r--r--. 1 root root 37 Feb 21 15:42 sh01.sh

先用source运行
[root@linux1 sh]# source sh01.sh
1111
niu
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
total 4
-rw-r--r--. 1 root root 37 Feb 21 15:42 sh01.sh
6855

使用bash运行
[root@linux1 sh]# bash sh01.sh
1111
niu
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
sh01.sh: line 4: ll: command not found
6900
4、bash 与pstree
[root@linux1 sh]# bash
[root@linux1 sh]# echo $$
6969
[root@linux1 sh]# pstree
init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─6*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash─┬─bash───pstree
     │                    ├─man───sh───sh─┬─groff───grotty
     │                    │               └─less
     │                    └─man───sh───sh───less
     └─udevd───2*[udevd]
[root@linux1 sh]# exit
exit
[root@linux1 sh]# pstree
init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─6*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash─┬─man───sh───sh─┬─groff───grotty
     │                    │               └─less
     │                    ├─man───sh───sh───less
     │                    └─pstree
     └─udevd───2*[udevd]
5、通过执行文件看不同的执行方式的差别

[root@linux1 sh]# ll
total 4
-rw-r--r--. 1 root root 44 Feb 21 16:20 sh01.sh
[root@linux1 sh]# echo $$
6855
[root@linux1 sh]# cat sh01.sh 
echo 1111
echo 'niu'
ls /
ll
echo $$
pstree

source 原父bash执行

[root@linux1 sh]# source sh01.sh 
1111
niu
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
total 4
-rw-r--r--. 1 root root 44 Feb 21 16:20 sh01.sh
6855
init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─6*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash─┬─man───sh───sh─┬─groff───grotty
     │                    │               └─less
     │                    ├─man───sh───sh───less
     │                    └─pstree
     └─udevd───2*[udevd]
     
bash 新父bash执行

[root@linux1 sh]# bash sh01.sh 
1111
niu
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
sh01.sh: line 4: ll: command not found
7023
init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─6*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash─┬─bash───pstree
     │                    ├─man───sh───sh─┬─groff───grotty
     │                    │               └─less
     │                    └─man───sh───sh───less
     └─udevd───2*[udevd]
     
.  原父bash执行

[root@linux1 sh]# . sh01.sh 
1111
niu
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
total 4
-rw-r--r--. 1 root root 44 Feb 21 16:20 sh01.sh
6855
init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─6*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash─┬─man───sh───sh─┬─groff───grotty
     │                    │               └─less
     │                    ├─man───sh───sh───less
     │                    └─pstree
     └─udevd───2*[udevd]

查看当前进程树

[root@linux1 sh]# pstree
init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─6*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash─┬─man───sh───sh─┬─groff───grotty
     │                    │               └─less
     │                    ├─man───sh───sh───less

变成可执行文件

[root@linux1 sh]# chmod +x sh01.sh
[root@linux1 sh]# ll
total 4
-rwxr-xr-x. 1 root root 44 Feb 21 16:20 sh01.sh

./  没有#! /bin/bash 时新父bash 执行
[root@linux1 sh]# ./sh01.sh
1111
niu
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
./sh01.sh: line 4: ll: command not found
7033
init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─6*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash─┬─bash───pstree
     │                    ├─man───sh───sh─┬─groff───grotty
     │                    │               └─less
     │                    └─man───sh───sh───less
     └─udevd───2*[udevd]
     
加入 #! /bin/bash

[root@linux1 sh]# vi sh01.sh 

[root@linux1 sh]# cat sh01.sh 
#! /bin/bash
echo 1111
echo 'niu'
ls /
ll
echo $$
pstree

./  有#! /bin/bash 时 原子bash 执行
[root@linux1 sh]# ./sh01.sh
1111
niu
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
./sh01.sh: line 5: ll: command not found
7039
init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─6*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───bash─┬─man───sh───sh─┬─groff───grotty
     │                    │               └─less
     │                    ├─man───sh───sh───less
     │                    └─sh01.sh───pstree
     └─udevd───2*[udevd]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值