首页 > 系统相关 >Linux工作原理11 Shell脚本

Linux工作原理11 Shell脚本

时间:2024-07-28 11:08:30浏览次数:14  
标签:11 脚本 shell 使用 echo 命令 Shell Linux bin

11 shell脚本

如果你能在 shell 中输入命令,你就能编写 shell 脚本。shell 脚本(也称为 Bourne shell 脚本)是写在文件中的一系列命令;shell 会从文件中读取这些命令,就像在终端中输入命令一样。

11.1 shell脚本基础

Bourne shell 脚本一般以下面一行开始,表示 /bin/sh 程序应执行脚本文件中的命令。(确保脚本文件开头没有空白)。

#!/bin/sh

在本书的其他脚本中,你会看到#!你可以在#/bin/sh行后列出任何希望shell执行的命令。例如

#!/bin/sh
#
# Print something, then run ls

echo About to run the ls command.
ls

shell 会忽略 # 字符之后一行的任何内容。使用注释来解释脚本中其他人阅读代码时可能难以理解的部分,或在日后重温代码时唤起自己的记忆。

与 Unix 系统上的任何程序一样,您需要为 shell 脚本文件设置可执行位,但同时也必须设置读取位,以便 shell 能够读取文件。最简单的方法如下:

$ chmod +rx script

这条 chmod 命令允许其他用户读取和执行脚本。如果不想这样,请使用绝对模式 700(有关权限的复习,请参阅第 2.17 节)。

创建 shell 脚本并设置读取和执行权限后,可以将脚本文件放在命令路径中的某个目录下,然后在命令行上运行脚本名称即可。如果脚本位于当前工作目录中,也可以运行 ./script,或者使用完整路径名。

例如,运行名为 myscript 的脚本会导致内核运行 /bin/sh myscript。

了解了基础知识后,让我们来看看 shell 脚本的一些限制。

Shebang,也称为 Hashbang 或 Hash-bang,是一种特殊的语法,通常出现在文本文件的第一行的前两个字符:#!。它的作用是指定脚本应该由哪个解释器来执行。用途如下:

  • 明确指定解释器: 不同的脚本语言有不同的解释器(比如 Bash、Python、Perl 等)。Shebang 告诉操作系统,应该使用哪个解释器来运行这个脚本,避免了歧义。
  • 直接执行脚本: 有了 Shebang,你就可以直接运行脚本文件,而不需要每次都指定解释器。
  • 跨平台兼容性: 不同的系统可能默认的 shell 或解释器不同,Shebang 确保了脚本在不同系统上的可移植性。

Shebang 不一定是 #!/bin/sh;它可以构建为运行系统中任何接受脚本输入的程序,例如 #!/usr/bin/python,以运行 Python 程序。此外,你可能会遇到包含 /usr/bin/env 的不同模式的脚本。例如,你可能会在第一行看到类似 #!/usr/bin/env python 的内容。这会指示env工具运行 python。这样做的原因很简单:env 会在当前的命令路径中查找要运行的命令,因此不需要为可执行文件指定一个标准位置。缺点是命令路径中第一个匹配的可执行文件可能不是你想要的。

11.1.1 Shell 脚本的局限性

Bourne shell 可以相对轻松地操作命令和文件。在第 2.14 节中,我们了解了 shell 重定向输出的方法,这也是 shell 脚本编程的重要元素之一。然而,shell 脚本只是 Unix 编程的一种工具,虽然脚本具有相当强大的功能,但也有其局限性。

shell 脚本的主要优势之一是可以简化和自动执行原本可以在 shell 提示符下执行的任务,例如处理成批文件。但是,如果你想剔除字符串、执行重复的算术计算或访问复杂的数据库,或者如果你想使用函数和复杂的控制结构,你最好使用 Python或awk这样的脚本语言,甚至可能使用 C 这样的编译语言(这一点很重要,所以你会在本章中看到)。

最后,要注意 shell 脚本的大小。shell 脚本要简短。Bourne shell 脚本并不意味着要很大,尽管你无疑会遇到一些庞然大物。

11.2 引用和字面量

在使用 shell 和脚本的过程中,最令人困惑的一点就是不知道什么时候以及为什么要使用引号(quotes)和其他标点符号。假设您想打印 $100 字符串,请执行以下操作:

$ echo $100
00
$ echo "$100"
00
$ echo '$100'
$100

11.2.1 字面量

当你使用引号时,通常是要创建一个字面形式,即 shell 在将其传递到命令行之前不应分析(或试图更改)的字符串。除了刚才例子中的 $ 之外,当你想将 * 字符传递给 grep 等命令而不是让 shell 展开它,以及当你需要在命令中使用分号 (

标签:11,脚本,shell,使用,echo,命令,Shell,Linux,bin
From: https://www.cnblogs.com/testing-/p/18326798

相关文章

  • Matlab编程资源库(11)多项式计算
    一、多项式的四则运算1.多项式的加减运算2.多项式乘法运算   函数conv(P1,P2)用于求多项式P1和P2的乘积。这里,P1、P2是两个多项式系数向量。3.多项式除法   函数[Q,r]=deconv(P1,P2)用于对多项式P1和P2作除法运算。其中Q返回多项式P1除以P2的商式,r返回P1除以......
  • 【shell脚本快速一键部署项目】
    目录一、环境拓扑图二、主机环境描述三、注意四、需求描述五、shell代码的编写六、总结一、环境拓扑图二、主机环境描述主机名主机地址需要提供的服务content.exam.com172.25.250.101提供基于httpd/nginx的YUM仓库服务ntp.exam.com172.25.250.102提供基于Chrony......
  • 【高中数学/指数、对数】比大小:log_9_10 VS log_10_11
    【问题】比大小:log_9_10VSlog_10_11【解答】下面将采用列表法分步解答原式log_9_10log_10_11变换(关键步骤)log_9_9*10/9log_10_10*11/10分离log_9_9+log_9_10/9log_10_10+log_10_11/10简化1+log_9_10/91+log_10_11/10指代设a=log_9_10/9设b=log_10_11/10指数化9^a=10/910^......
  • Linux文件系统相关知识:存储设备、文件系统、分区、挂载、块设备、部分相关简单指令。
    1.存储设备是什么?怎么理解分区和格式化?存储设备:指物理硬件设备,‌用于存储数据。‌这包括硬盘驱动器(‌HDD)‌、‌固态驱动器(‌SSD)‌、‌USB闪存驱动器、‌RAID阵列等。‌这些设备提供了实际的存储空间,‌可以用来存储操作系统、‌应用程序、‌文件、‌数据等。‌存储设备的容量......
  • linux centos7环境下通过rpm部署MySQL
    一、环境准备环境:centos7,确保虚拟机内存足够,不然无法上传数据包和解压mysql包:mysql-8.0.25-1.el7.x86_64.rpm-bundle.tar这个包去MySQL官网可以下载,此链接可以直达:https://downloads.mysql.com/archives/community/二、打开远程连接,连上自己的虚拟机1.连上自己的虚拟机后......
  • Linux 最常用命令!
    Linux最常用命令![点击下载文档]Linux是目前应用最广泛的服务器操作系统,基于Unix,开源免费,由于系统的稳定性和安全性,市场占有率很高,几乎成为程序代码运行的最佳系统环境。linux不仅可以长时间的运行我们编写的程序代码,还可以安装在各种计算机硬件设备中,如手机、路由器等,And......
  • Linux的fork和vfork
    fork用于创建子进程。在调用时,返回两次:子进程的返回值是0,父进程的返回值的新建子进程的ID。子进程是父进程的副本。子进程和父进程继续执行fork之后的指令。子进程获得父进程的数据空间、堆、栈的副本共享的是:文件描述符、mmap建立的映射区子进程和父进程共享的......
  • 文心一言 VS 讯飞星火 VS chatgpt (311)-- 算法导论22.2 9题
    九、设G=(V,E)......
  • linux磁盘配额
    目录磁盘配额Linux磁盘配额的基本概念概述:重要性:磁盘配额可以进行两方面的限制:磁盘配额的限制方法分为软限制和硬限制两种:磁盘配额操作开启磁盘配额功能(rpm-qa|grepquota)文件系统重新挂载(/cet/fstab)永久挂载 临时挂载设置许可模式(setenforce0)生成配额文件(qu......
  • linux磁盘分区与挂载
    目录硬盘接口IDE硬盘接口SATA接口SCSI接口磁盘分区与文件系统挂载磁盘在Linux系统中的表示方法IDE接口的硬盘在Linux系统中的表示方法SATA接口/SCSI接口/USB接口的硬盘在Linux系统中的表示方法文件系统挂载挂载点挂载文件系统(mount)挂载光盘:df-hT  查看磁盘......