Shell语言-02-四种执行方式

1. 简述

  • 工作目录执行
  • 绝对路径执行
  • sh执行
  • shell环境执行

2. 工作目录执行

其实就是进入到脚本所在的文件夹 然后使用 ./ 执行脚本,但是注意要权限,不然会报错,

[root@Centos-root473791 ~]# ./9*9.sh
-bash: ./9*9.sh: Permission denied   
[root@Centos-root473791 ~]# chmod  a+x 9*9.sh
[root@Centos-root473791 ~]# ./9*9.sh
1*1=1   
2*1=2   2*2=4   
3*1=3   3*2=6   3*3=9   
4*1=4   4*2=8   4*3=12   4*4=16   
5*1=5   5*2=10   5*3=15   5*4=20   5*5=25   
6*1=6   6*2=12   6*3=18   6*4=24   6*5=30   6*6=36   
7*1=7   7*2=14   7*3=21   7*4=28   7*5=35   7*6=42   7*7=49   
8*1=8   8*2=16   8*3=24   8*4=32   8*5=40   8*6=48   8*7=56   8*8=64   
9*1=9   9*2=18   9*3=27   9*4=36   9*5=45   9*6=54   9*7=63   9*8=72   9*9=81   
[root@Centos-root473791 ~]# 

99乘法脚本如下

#! /bin/bash
a=1
b=1
while ((a<=9))
do
   while ((b<=a))
    do
       let "c=a*b"
       echo -n "$a*$b=$c   "
       let b++
    done
  let a++
  let b=1      #因为每个乘法表都是1开始乘,所以b要重置
  echo ""
done

3. 绝对路径执行

其实就是从根目录 / 到脚本所在的目录 执行脚本,跟工作目录其实差不多一回事,也需要权限

[root@Centos-root473791 ~]# `pwd`/9*9.sh
1*1=1   
2*1=2   2*2=4   
3*1=3   3*2=6   3*3=9   
4*1=4   4*2=8   4*3=12   4*4=16   
5*1=5   5*2=10   5*3=15   5*4=20   5*5=25   
6*1=6   6*2=12   6*3=18   6*4=24   6*5=30   6*6=36   
7*1=7   7*2=14   7*3=21   7*4=28   7*5=35   7*6=42   7*7=49   
8*1=8   8*2=16   8*3=24   8*4=32   8*5=40   8*6=48   8*7=56   8*8=64   
9*1=9   9*2=18   9*3=27   9*4=36   9*5=45   9*6=54   9*7=63   9*8=72   9*9=81  

4. sh执行

sh执行,指的是用脚本对应的shbash来接着脚本执行,换句话说,简单理解就是 别人来调用你执行,而不是你自己执行,也就不需要执行权限和知道路径了,反正是别人来找你,官方点就是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限和 指定bash路径

5. shell环境执行

就是在当前shell环境中执行,可以使用点 . 或者source 接脚本执行
如果不理解会出现一些坑,建议使用sh执行
如下
开始有 9*9.sh脚本,后面我改名为99.sh,再次执行还是会出现结果,这就很神奇,
明明不存在该脚本了,但是还可以执行,这就是所谓的环境执行

[root@Centos-root473791 ~]# ll
total 72
-rw-r--r--  1 root root   720 Jan 22 21:10 1.sh
-rw-r--r--  1 root root  1057 Jan 22 21:29 2.sh
-rw-r--r--  1 root root    13 Jan 22 22:13 3.sh
-rwxr-xr-x  1 root root   234 Nov 23 12:00 99.sh
drwxr-xr-x  2 root root  4096 Dec  5 01:25 aaaa
-rw-------. 1 root root  1524 Aug 22 07:39 anaconda-ks.cfg
-rw-r--r--  1 root root    62 Nov 27 23:50 awkscript
-rw-r--r--  1 root root    22 Nov 27 23:41 awk.txt
-rw-r--r--. 1 root root 27338 Aug 22 07:39 install.log
-rw-r--r--. 1 root root  7572 Aug 22 07:38 install.log.syslog
[root@Centos-root473791 ~]# . 9*9.sh 
1*1=1   
2*1=2   2*2=4   
3*1=3   3*2=6   3*3=9   
4*1=4   4*2=8   4*3=12   4*4=16   
5*1=5   5*2=10   5*3=15   5*4=20   5*5=25   
6*1=6   6*2=12   6*3=18   6*4=24   6*5=30   6*6=36   
7*1=7   7*2=14   7*3=21   7*4=28   7*5=35   7*6=42   7*7=49   
8*1=8   8*2=16   8*3=24   8*4=32   8*5=40   8*6=48   8*7=56   8*8=64   
9*1=9   9*2=18   9*3=27   9*4=36   9*5=45   9*6=54   9*7=63   9*8=72   9*9=81   
[root@Centos-root473791 ~]# 

6. 总结区别

  • 1.绝对路径和相对路径没有什么区别,两种方式都需要提前赋予脚本以执行权限。
  • 2.sh或者bash方式是把脚本当做bash的调用来处理,所以,脚本不需要有执行权限就可以执行。
  • 3.前三种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。
  • 4.source或者.方式是使脚本内容在当前shell里执行,而不是单独开子shell执行。

开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,不做特殊通道处理的话,父shell是不可见的。而在当前shell中执行的话,则所有设置的环境变量都是直接生效可用的。

7. 重点(别踩坑)

source是Shell(准确地说是Bash)的内置命令,在Bourne Shell中的等价命令是一个点.,即点命令。用source命令执行脚本文件时,是在当前Shell进程中执行,而不是像./与sh方式一样在新的Shell进程中执行,因此早先设置的变量在脚本里是可以读取到的。

source一般不用来执行业务脚本,最常见用途是在某些初始化脚本修改之后使其立即生效,即source /etc/profile这样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alan0517

感谢您的鼓励与支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值