【Linux | Shell】构建基础脚本 - 读书笔记

news2024/11/15 18:03:00

目录

  • 一、创建第一个Shell脚本
    • 1.1 执行多个命令
    • 1.2 创建 shell 脚本
      • 1.2.1 指定使用的shell
      • 1.2.2 在脚本文件各行输入命令
      • 1.2.3 添加执行权限
      • 1.2.4 执行脚本
    • 1.3 显示消息——echo命令
  • 二、使用变量
    • 2.1


在这里插入图片描述

一、创建第一个Shell脚本

前面得文章介绍过一些基础的 Linux 命令了,这小节将手把手带初学者创建一个 shell 脚本,shell 脚本会将多个命令放在一个文件中,让 shell 依次执行,帮我们完成任务。
shell 脚本的关键是能够输入多个命令并处理每个命令的结果,甚至是将一个命令的结果传给另一个命令。
本节内容:

  • 执行多个命令
  • 创建shell脚本
  • 显示消息——echo命令

1.1 执行多个命令

Linux 系统允许在同一行执行多个命令,彼此用分号;隔开:
例如:

wkd@ubuntu:~$ date ; who
Sun Jul  9 22:07:27 CST 2023
wkd       pts/10       2023-06-30 23:16 (192.168.2.180)
wkd       pts/11       2023-07-03 10:09 (192.168.2.180)
wkd       pts/13       2023-07-03 10:12 (192.168.2.180)
wkd       pts/14       2023-07-03 14:41 (192.168.2.180)
wkd       pts/16       2023-07-06 09:38 (192.168.2.180)
wkd@ubuntu:~$ 

date 命令先运行,显示当前日期和时间,随后是 who 命令的输出,显示当前已登录系统的用户。
通过这种办法,能将任意多个命令串联在一起使用,只要不超过命令行最大字符数 255 就可以。
从shell脚本的定义来看,使用多个命令已经是一个小型的shell脚本了;但必须在命令提示符处输入整个命令。下个小节介绍将这些命令组合成一个简单的文本文件,这样就无须再手动输入了。

1.2 创建 shell 脚本

初学者创建自己的第一个shell脚本文件,可以按照下面四个步骤来操作:

  • 指定使用的shell
  • 在脚本文件各行输入命令
  • 添加执行权限
  • 执行脚本

1.2.1 指定使用的shell

创建一个test.sh的文件,使用文本编辑器编辑该文件。
在创建 shell 脚本文件时,必须在文件的 第一行 指定要使用的 shell,格式是在符号#!后加上shell的绝对路径,如下:

#!/bin/bash

说明:
#后面的惊叹号(#!)会告诉 shell 用哪个 shell 来运行脚本。
#用作注释行,shell 并不会处理 shell 脚本中的注释行

1.2.2 在脚本文件各行输入命令

在指明了 shell 之后,可以在文件的各行输入命令,每行末尾加一个换行符。需要注释的可用#添加,下面是在上一步添加完的脚本:

#!/bin/bash
# This script displays the date and who's logged on
date
who

第一行指明shell;第二行是注释;第三行是date命令,第四行是who命令。

1.2.3 添加执行权限

在编写完脚本后,可以使用ls -l命令去查看脚本是否有执行权限,如果没执行权限的话,需要执行下面命令赋予文件属主执行权限:

chmod u+x test.sh

添加完执行权限后,就到下一步了,执行脚本

1.2.4 执行脚本

脚本有了执行权限后,要执行脚本,就是要让shell可以找到 test.sh 文件,可以采用下列两种方法之一:

  • 将放置 shell 脚本文件的目录添加到 PATH 环境变量中;
  • 在命令行中使用绝对路径或相对路径来引用 shell 脚本文件。

我们这个例子使用第二种方法,可以使用单点号来引用当前目录下的文件:

wkd@ubuntu:~$ ./test.sh 
Sun Jul  9 22:47:29 CST 2023
wkd       pts/10       2023-06-30 23:16 (192.168.2.180)
wkd       pts/11       2023-07-03 10:09 (192.168.2.180)
wkd       pts/13       2023-07-03 10:12 (192.168.2.180)
wkd       pts/14       2023-07-03 14:41 (192.168.2.180)
wkd       pts/16       2023-07-06 09:38 (192.168.2.180)
wkd@ubuntu:~$ 

至此,第一个Shell脚本就创建完成并执行完成了。

1.3 显示消息——echo命令

在 echo 命令后面加上字符串,那么 echo 命令就会显示出这个字符串:

wkd@ubuntu:~$ echo This is a test
This is a test
wkd@ubuntu:~$

echo 命令可用单引号或双引号来划定字符串。如果你在字符串中要用到某种引号,可以使用另一种引号来划定字符串:

wkd@ubuntu:~$ echo "This is a test to see if you're paying attention"
This is a test to see if you're paying attention
wkd@ubuntu:~$ echo 'Rich says "scripting is easy".'
Rich says "scripting is easy".
$

-n 选项可以把字符串和命令输出显示在同一行中:

wkd@ubuntu:~$ echo -n "The time and date are: " ; date
The time and date are: Sun Jul  9 22:57:58 CST 2023
wkd@ubuntu:~$ 

在这里插入图片描述

二、使用变量

2.1

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【InnoDB 存储引擎】5.4.5 The Slow Query Log(慢日志实验, 详细描述了与 MySQL 相关的慢日志方方面面)

文章目录 1 慢日志实验环境准备2 开始实验2.1 实验 1:超过查询时间相关慢日志并观察2.2 实验 2:不使用索引相关慢日志并观察2.3 实验 3:打印额外的慢日志信息2.4 实验 4:使用 mysqldumpslow 工具分析日志文件2.5 实验 5&#xff1…

【雕爷学编程】Arduino动手做(153)---2.4寸TFT液晶触摸屏模块5

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

【计算机组成与体系结构Ⅰ】实验5 CPU组成与机器指令执行实验

一、实验目的 1:将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机。 2:用微程序控制器控制模型机数据通路。 3:通过CPU运行几条机器指令(排除中断指令)组成的简单…

MARLIN: Masked Autoencoder for facial video Representation LearnINg

题目MARLIN: Masked Autoencoder for facial video Representation LearnINg译题MARLIN:用于面部视频表示的 maked 自动编码器 LearnINg时间2023年期刊/会议CVPR 论文链接:MARLIN_MASKED_Autoencoder_for_Facial_Video_Representation_Learning MARLIN…

C++11右值引用(移动构造、完美转发等)

在讲解移动构造和完美转发之前,我们需要先了解什么是右值引用。 但在讲解右值引用之前,我们也得知道左值和右值分别是什么,有什么区别。 目录 左值与右值 左值与左值引用 右值与右值引用 引用和右值引用的区别 移动构造 移动赋值 插…

基于simulink处理监控视频以选择包含运动的帧(附源码)

一、前言 此示例演示如何处理监控视频以选择包含运动的帧。安全问题要求使用摄像机对重要位置进行持续监控。为了有效地记录、查看和存档这些海量数据,您可以减小视频帧大小或减少录制的视频帧总数。此示例说明了后一种方法。在其中,相机视野中的运动会…

1762_gcc编译c语言makefile自动生成工具的Perl实现

全部学习汇总: GreyZhang/g_makefile: Learn makefile from all kinds of tutorials on the web. Happy hacking and lets find an common way so we may dont need to touch makefile code any more! (github.com) 前阵子实现了一个CodeWarrior嵌入式开发环境的自动…

【Java从入门到大牛】数组详解

🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:Java从入门到大牛 🌠 首发时间:2023年7月9日 🦋 欢迎关注🖱点赞👍收藏🌟留言&#x1f43e…

Python + pymysql 之 MySQL 查询操作

在MySQL中构建一个测试表,如下: 查询单条数据 # -*- coding: UTF-8 -*- import pymysqldef mysql_query():"""MySQL查询:return:"""# 打开数据库连接db pymysql.connect(host"127.0.0.1",user"root"…

IDEA 配置 openjdk,jre

使用 idea 配置 zip 版本的 openjdk 和 jre,我使用的时 redhat 提供的 jdk 和 jre。 一、下载 idea、jdk 和 jre 红帽下载地址为: jdk 和 jre 安装地址根据个人配置,我的配置如下: 下划线的分别为我的 jdk 和 jre 保存路径 二…

简单学习UE5.2的PCG框架插件里的基础概念

目标 最近了解到5.2版本推出了实验性的功能PCG框架,以及用它做的范例 Electric Dreams。 本篇我简单学习它的一些基础概念,做一些记录。 0. 启用插件 此功能相关的类型都在PCG插件中,因此首先要确保启用了PCG插件: 1. PCGGr…

为什么进程地址空间中包括操作系统?

今天聊聊进程地址空间这点小事。 说到进程的地址空间,大家可能都知道这样一张图: 这张图就是Linux程序运行起来后所谓的进程地址空间,这里包括我们熟悉的代码区、数据区、以及堆区和栈区,今天我们不讲解这些区域,而是…

Vue生态及实践 - SSR(上)

目录 目标 理论 Rendering 你真的需要SSR亦或是同构吗? 同构实践 通用代码 同构第一步:避免单例 src/app.js src/store.js src/router.js 同构第二步:Server entry【服务端进入】;Client entry【客户端进入】 src/entry…

ESP32设备驱动-AS5600磁性旋转位置传感器

AS5600磁性旋转位置传感器 文章目录 AS5600磁性旋转位置传感器1、AS5600介绍2、硬件准备3、软件准备4、驱动实现1、AS5600介绍 AS5600 是一款可编程的 12 位高分辨率非接触式磁性旋转位置传感器。 AS5600可以作为磁性电位器或磁性编码器使用,具有出色的可靠性和耐用性。 与传…

网页版代码编辑器实现

接着前几天写的博客https://blog.csdn.net/woyebuzhidao321/article/details/131495855,提到了涉及vscode网页版工作区创建的api,这两天一时兴起,搞了一个网页版的代码编辑器,如果在2020年10月之前,实现一个网页版代码…

活动笔记 | 「企业人效提升路径」之数字化实践

6月27日,由人力资源智享会联合盖雅工场等机构主办的2023中国人力资源数字化论坛在北京顺利举办。盖雅工场高级解决方案顾问谷天毅先生发表了主题为 《企业人效提升路径之数字化实践》 的分享。 以下是分享内容,enjoy~ △ 盖雅工场高级解决方案顾问谷天…

httpx 返回都是乱码问题,非编码问题。

因为python 的requests 不能使用抓http2 的报文。所以看了一些httpx的使用。但是发现httpx 不能自动解压,text打印出来的都是乱码。一开始以为是编码格式的bug ,但是使用chardet 确认了确实是utf-8.然后怀疑是压缩的问题。先去官网搜了一些文档 文档说会…

opencv4.7.0编译opencv-contrib-4.7.0以及CUDA

0、引言 最近工作中需要用到使用CUDA加速后的opencv进行传统算法的开发,在编程之前,需要先解决环境编译和lib库问题,本文就是记录自己编译opencv-4.7.0的全过程。 1、CUDA下载和安装 可参考我之前的博客WIN10安装配置TensorRT详解中的前几…

达尔文——生物医疗科学领域大模型

赛灵力官网 1. 生物医疗领域的挑战 1.1 复杂性 生物系统和生物过程非常复杂,包含大量的相互作用和调控机制,理解和解析这些复杂性是一项巨大的挑战。 举例来说,单单一个人类,体内的生物信息就非常复杂: 人类体内体内…

Django_re_path_使用正则匹配url

与path定义的路由相比,re_path 定义的路由可以使用正则表达式匹配url。 需要注意的是: 如果未定义匹配结果的变量名,匹配的结果默认传入视图的第2个形参。如果定义了匹配结果的变量名,匹配的结果会传给视图的同名字段&#xff0…