Shell脚本简单认知

1、什么是Shell

Shell是一个命令解释器,解释用户对操作系统的操作。将用户输入的命令送到内核。有自己的编程语言对命令进行编辑并组织为程序。

本文内容同微信公众号【凡登】,关注不迷路,学习上高速,欢迎关注共同学习。

2、Shell的类型

可使用cat /etc/shells查看当前系统的shell, 这里我们主要围绕bash讲解

[@root ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

常见的Shell类型如下:

  • Bourne Shell (/usr/bin/sh或/bin/sh) : 这是Unix系统的第一个shell,由Stephen Bourne在AT&T Bell实验室开发。它是最基本的shell,支持管道和输入/输出重定向,但没有提供很多其他的功能,例如函数、数组或进程替换等
  • Bourne Again Shell (/bin/bash): 这是由Brian Fox和Brian Ratner开发的Unix shell。bash是Unix和Linux系统的默认shell,提供了许多 Bourne Shell 没有的功能,例如通配符扩展、函数、进程替换等。它是最常用的shell之一。
  • C Shell (/usr/bin/csh): C Shell是由Bill Joy在伯克利大学开发的。它的语法类似C语言,支持程序式的编程,提供了很多内置命令,可以很方便地编写复杂的脚本。但是,它的一个缺点是脚本不易于阅读和理解。
  • K Shell (/usr/bin/ksh) : K Shell是由David Korn在Bell实验室开发的。它结合了C Shell和Bourne Shell的优点,提供了很多功能,如数组、函数、命令替换等。它的语法比较直观,但比C Shell更易于阅读和理解。
  • Shell for Root (/sbin/sh) : 这个shell是为根用户设计的,通常只在系统级别进行配置和管理时使用。它提供了比普通shell更强大的权限和功能,但一般用户不需要直接使用它。
  • Zsh(Z-shell):Zsh是一种功能强大的Shell,它有许多额外的特性,如编程接口,更智能的命令行提示符,动态帮助,命令行编辑等。Zsh还有很强的扩展性,能够支持很多自定义功能
  • PowerShell :PowerShell 是 Microsoft 开发的用于管理 Windows 系统的 Shell。它允许用户通过脚本执行一系列命令,以及管理和配置 Windows 系统

在一般情况下,并不区分Bourne Shell和Bourne Again Shell,像#!/bin/sh,它同样也可以改为#!/bin/bash。在Linux系统中,Bash是最常用的Shell,因为它的易用性和免费性。同时,Bash也是大多数Linux系统默认的Shell。本系列主要围绕Bash讲解,Bash官网

3、Shell脚本格式

  • 文件名后缀建议以.sh 结尾
  • 申明解释器,第一行一般以#!/bin/bash 或 #!/bin/sh 开头 指定由那个解释器执行脚本中的内容
  • 中间是命令和变量
  • 一行一个命令,一个命令做一件事
    • 如果想把多个命令放在一行? 使用分号隔开,如: cd ~ ; pwd ; ls -l
  • 以#开头表示注释
  • 给脚本添加用户执行权限 chmod +x xx.sh

4、Hello World

# 编写脚本
[@root ~]# vim test.sh

#!/bin/bash
echo "Hello World"  # 输出: Hello World

# 添加执行权限
[@root ~]# chmod u+x test.sh

# 执行脚本
[@root ~]# bash test.sh 
Hello World

5、脚本执行方式

由于脚本中的内建命令可能会影响当前环境,所以不同的执行方式,产生的不一样的效果。

以下列举3中不同的执行方式

  • bash xxx.sh 子进程运行脚本,不影响当前执行环境,脚本不需要执行权限
  • ./xxx.sh 子进程运行脚本,不影响当前执行环境,脚本需要执行权限
  • source ./xxx.sh 当前进程运行脚本,可能会影响当前环境,脚本不需要执行权限,source也可以简化为 .

如何理解子进程、当前进程,以及会影响当前环境?以下示例3种脚本不同执行方式

脚本test.sh内容

# 编写脚本

#!/bin/bash
cd /root/data        # 进入/root/data目录
pwd                  # 输入当前目录

# 执行前查看脚本当前环境目录/root,记住
[@root ~]# pwd
/root
# 执行前查看当前脚本无执行权限
[@root ~]# ls -l test.sh
-rw-r--r--  1 root  root  29 10 12 17:33 test.sh

第一种运行方式:bash test.sh

# 执行脚步
[@root ~]# bash test.sh
/root/data 
# 脚本执行过程中的路径已经变成/root/data ,执行后查看还是/root 
[@root ~]# pwd
/root

说明:bash test.sh 方式执行脚本,通过演示执行脚本前后当前目录均为/root,说明此执行方式不会改变当前环境,

而脚本执行过程中目录由之前的/root 切换为/root/data 确实改变了,说明执行脚本前后不在一个执行环境

第二种运行方式./test.sh

[@root ~]# ./test.sh
-bash: ./test.sh: 权限不够
# 添加执行权限
[@root ~]# chmod u+x test.sh
-rwxr--r--  1 root  root  29 10 12 17:34 test.sh
# 再次执行
[@root ~]# ./test.sh
/root/data 
# 脚本执行过程中的路径已经变/root/data ,执行后查看还是/root
[@root ~]# pwd
/root

说明:执行效果同脚本运行方式一,不同点./test.sh 方式 需要给脚本添加执行权限

第三种运行方式source test.sh

[@root ~]# source test.sh   # 或执行 . ./test.sh
/root/data 
# 脚本执行过程中的路径已经变/root/data ,执行后查看还是/root/data  执行脚本后当前环境路径已经变化
[@root ~]# pwd
/root/data

说明:执行脚本前后路径由/root 变为 /root/data 执行过程中和执行后均最终目录均为/root/data 即,表明当前脚本处于同一个运行环境中。

再次感谢您的阅读,欢迎关注微信公众号【凡登】共同学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值