2,Shell脚本入门

2.1、脚本格式

脚本以#!/bin/bash开头(指定解析器)

2.2、第一个Shell脚本:helloworld.sh

(1) 需求: 创建一个 Shell 脚本, 输出 helloworld

(2) 过程如下

step1:创建helloworld.sh文件,内容如下 vi helloworld.sh

#!/bin/bash
echo "helloworld"

step2:运行helloworld.sh文件,命令如下

[root@jenkins ~]# chmod +x helloworld.sh
[root@jenkins ~]# ./helloworld.sh
helloworld

2.3、脚本的执行方式

上面我们使用的是./helloworld.sh来执行helloworld.sh脚本,其实执行shell脚本文件有很多方式,下面来看下。

2.3.1、第1种:采用bash或sh+脚本的绝对路径或相对路径(不用赋予脚本+x权限)

(1)sh+脚本的相对路径

[root@jenkins ~]# pwd
/root
[root@jenkins ~]# sh ./helloworld.sh
helloworld
[root@jenkins ~]#

(2)sh+绝对路径

[root@jenkins ~]# sh /root/helloworld.sh
helloworld
[root@jenkins ~]#

(3)bash+脚本的相对路径或者是相对路径

[root@jenkins ~]# bash ./helloworld.sh
helloworld
[root@jenkins ~]# bash /root/helloworld.sh
helloworld
[root@jenkins ~]#
2.3.2、第2种: 采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
[root@jenkins ~]# ./helloworld.sh
helloworld
[root@jenkins ~]# /root/helloworld.sh
helloworld
[root@jenkins ~]#

注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限;第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。

2.3.3、第3种:在脚本的路径前加上”.”或者source
[root@jenkins ~]# . helloworld.sh
helloworld
[root@jenkins ~]# source helloworld.sh
helloworld
[root@jenkins ~]#

2.4、父子shell

当我们使用ssh连接工具登录linux以后,出来了一个黑屏界面,如下,就开启了一个shell进程

[root@jenkins ~]#











可以使用ps -f查看到到当前的shell进程,如下,使用是bash

[root@jenkins ~]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       1833   1829  0 13:02 pts/0    00:00:00 -bash
root       1903   1833  0 13:21 pts/0    00:00:00 ps -f

shell可以一层层嵌套,在当前shell中可以使用bash命令开启一个子shell,子shell中还可以继续执行bash命令再次打开一个子shell,多层级父子shell

[root@jenkins ~]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       1833   1829  0 13:02 pts/0    00:00:00 -bash
root       1903   1833  0 13:21 pts/0    00:00:00 ps -f
[root@jenkins ~]# bash
[root@jenkins ~]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       1833   1829  0 13:02 pts/0    00:00:00 -bash
root       1910   1833  0 13:41 pts/0    00:00:00 bash
root       1921   1910  0 13:41 pts/0    00:00:00 ps -f
[root@jenkins ~]# bash
[root@jenkins ~]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       1833   1829  0 13:02 pts/0    00:00:00 -bash
root       1910   1833  0 13:41 pts/0    00:00:00 bash
root       1922   1910  0 13:41 pts/0    00:00:00 bash
root       1933   1922  0 13:41 pts/0    00:00:00 ps -f
[root@jenkins ~]#

image.png

使用exit可以一层层从里面的shell中向外退出,现在有3层shell,如果需要退出登录,则需要执行3次exit,如下

[root@jenkins ~]# exit
exit
[root@jenkins ~]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       1833   1829  0 13:02 pts/0    00:00:00 -bash
root       1910   1833  0 13:41 pts/0    00:00:00 bash
root       1936   1910  0 13:43 pts/0    00:00:00 ps -f
[root@jenkins ~]# exit
exit
[root@jenkins ~]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root       1833   1829  0 13:02 pts/0    00:00:00 -bash
root       1937   1833  0 13:44 pts/0    00:00:00 ps -f
[root@jenkins ~]# exit
logout

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Session stopped
    - Press <return> to exit tab
    - Press R to restart session
    - Press S to save terminal output to file

2.5、执行shell脚本的几种方式的区别

刚刚上面介绍了执行shell脚本有3种方式

  • 第1种:bash 脚本文件或者sh 脚本文件
  • 第2中:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
  • 第3中:. 脚本文件或source 脚本文件

前2种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容, 当脚本内容结束, 则子 shell 关闭, 回到父 shell 中。

第3种, 也就是使用在脚本路径前加“.” 或者 source 的方式, 可以使脚本内容在当前 shell 里执行, 而无需打开子 shell。

子shell中无法访问父shell中定义的变量,如果需要访问,则需在父shell中,通过export 变量名将变量提升为全局环境变量,这样内层的shell才可以访问到外层shell中的环境变量,这也是为什么我们每次要修改完/etc/profile 文件以后, 需要 source 一下的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值