bash
- 启动器
- 解释器
- 用户交互式输入
- 文本文件输入
source 从当前shell环境中执行一个命令文件。
- 脚本的本质
- 启动一个子进程;
- 启动一个子程序;
- 以启动的子进程或者子程序读取文件;
- #!/bin/bash (默认情况,直接执行一个bash)
- #!/usr/bin/bash(指定bash环境)
- 读取方式
- source以当前bash读取文件;
- .以当前bash读取文件;
- bash以新建子bash读取文件;
- ./以新建子bash读取文件(chmod +x file 将文件变为可执行程序才可使用该方法)
`编写需要执行的命令到文件中保存`
[root@localhost ~]# vi sh.sh
ls /
echo "hello"
`查看当前的bash环境`
[root@localhost ~]# echo $$
1536
`以当前的bash环境执行文件`
[root@localhost ~]# source sh.sh
bin dev file home lib64 media opt root selinux sys usr
boot etc file1 lib lost+found mnt proc sbin srv tmp var
hello
init─┬─auditd───{auditd}
├─crond
├─dhclient
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─udevd───2*[udevd]
[root@localhost ~]# vi sh.sh
ls /
echo "hello"
pstree
`以当前的bash环境执行文件`
[root@localhost ~]# source sh.sh
bin dev file home lib64 media opt root selinux sys usr
boot etc file1 lib lost+found mnt proc sbin srv tmp var
hello
init─┬─auditd───{auditd}
├─crond
├─dhclient
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─udevd───2*[udevd]
1536
`新建一个子bash执行文件`
[root@localhost ~]# bash sh.sh
bin dev file home lib64 media opt root selinux sys usr
boot etc file1 lib lost+found mnt proc sbin srv tmp var
hello
init─┬─auditd───{auditd}
├─crond
├─dhclient
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───bash───pstree
└─udevd───2*[udevd]
1556
`查看当前的bash环境和执行文件的shell环境进行对比`
[root@localhost ~]# echo $$
1536
`在文件中添加指定的bash环境`
[root@localhost ~]# vi sh.sh
#! /bin/bash 读取文件时会新建一个shell环境
ls /
echo "hello"
pstree
echo $$
`但source仍以当前bash环境执行该文件`
[root@localhost ~]# source sh.sh
bin dev file home lib64 media opt root selinux sys usr
boot etc file1 lib lost+found mnt proc sbin srv tmp var
hello
init─┬─auditd───{auditd}
├─crond
├─dhclient
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─udevd───2*[udevd]
1536
`将文件变为可执行的二进制文件`
[root@localhost ~]# chmod +x sh.sh
[root@localhost ~]# ls
anaconda-ks.cfg file3 install.log install.log.syslog sh.sh
`将会新建一个子shell执行文件`
[root@localhost ~]# ./sh.sh
bin dev file home lib64 media opt root selinux sys usr
boot etc file1 lib lost+found mnt proc sbin srv tmp var
hello
init─┬─auditd───{auditd}
├─crond
├─dhclient
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───sh.sh───pstree
└─udevd───2*[udevd]
1566
`将读取文件新建bash删除`
[root@localhost ~]# vi sh.sh
ls /
echo "hello"
pstree
echo $$
`将会以当前bash执行文件`
[root@localhost ~]# ./sh.sh
bin dev file home lib64 media opt root selinux sys usr
boot etc file1 lib lost+found mnt proc sbin srv tmp var
hello
init─┬─auditd───{auditd}
├─crond
├─dhclient
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───bash───pstree
└─udevd───2*[udevd]
1570
[root@localhost ~]# echo $$
1536