笔记 - shell脚本

前言

        Shell脚本是一种用来执行命令行命令的脚本文件。它是由一系列Shell命令组成的程序,通常用于自动化任务、系统管理、数据处理等。Shell脚本可以运行在各种Unix和Linux系统上,也可以在Windows上的一些兼容环境(如Cygwin、WSL)中运行。

组成部分

1、解释器声明:脚本文件的第一行通常是#!(称为shebang),后跟解释器路径,用于指定脚本运行时使用的解释器。例如,使用Bash解释器:

#!/bin/bash

2、命令:Shell脚本由一系列Shell命令组成,每个命令在脚本中独立执行。

echo "Hello, World!"

3、变量:可以定义和使用变量来存储数据。

NAME="John"
echo "Hello, $NAME"

4、控制结构:包括条件语句(if、case)、循环(for、while)。

if [ "$NAME" == "John" ]; thenecho "Hello, John!"
elseecho "Hello, $NAME!"
fi

5、函数等。

#!/bin/bash# 定义函数
function greet {echo "Hello, $1"
}# 调用函数
greet "Alice"
greet "Bob"

三种执行方式的区别

1、./

  • 用途:使用当前目录下的解释器来执行脚本或可执行文件。
  • 解释器:取决于脚本的第一行(shebang)指定的解释器。例如,如果脚本的第一行是 #!/bin/bash,那么使用./myscript.sh会执行myscript.sh文件,并使用Bash作为解释器。
  • 适用性:主要用于执行当前目录下的脚本或二进制文件,比如用户自定义的Shell脚本或者可执行文件。
  • 权限要求:使用./来执行脚本,必须确保脚本文件具有可执行权限。

2、bash

  • 用途:显式地使用Bash解释器来执行脚本或命令。
  • 解释器:强制使用Bash解释器执行。不管脚本的shebang是什么,都会使用Bash来解释执行脚本。
  • 适用性:适合确保在不同系统上使用相同的Shell环境(Bash)来执行脚本,或者需要使用Bash特定功能的脚本。
  • 权限要求:使用bash命令来执行脚本,不需要脚本文件本身有可执行权限,只要用户对脚本文件有读权限即可。这是因为bash命令会直接解释执行文件,而不依赖文件自身的可执行权限。

3、sh

  • 用途:使用系统默认的Shell解释器来执行脚本或命令。
  • 解释器:通常指向系统上的标准Shell(可能是Bourne Shell或其衍生版本),不一定是Bash。
  • 适用性:保证脚本在不同UNIX系统上的兼容性,因为大多数UNIX系统都会安装一个标准的Shell解释器,比如Bourne Shell (sh)或其替代品。
  • 权限要求:使用sh命令来执行脚本,同样不需要脚本文件本身有可执行权限,只要用户对脚本文件有读权限即可。sh命令也会直接解释执行文件,不依赖文件自身的可执行权限。

概念

输出

echo:用于在终端上输出文本或变量的值

  • -e:启用解释反斜杠转义字符。
  • -n:不在末尾添加换行符。
  • -E:禁用解释反斜杠转义字符(默认行为)。

当使用 -e 选项时,以下转义字符可以被解释:

  • \a:警告(响铃)
  • \b:退格
  • \c:抑制(不输出)其后的换行符
  • \e:转义字符
  • \f:换页
  • \n:换行
  • \r:回车
  • \t:水平制表符
  • \v:垂直制表符
  • \\:反斜杠
  • \nnn:八进制值 nnn(1 到 3 位数字)
  • \xHH:十六进制值 HH(1 到 2 位数字)
#基础语法
echo "hello world!"#输出重定向到文件
echo "hello world!" > hello.txt#输出追加到文件末尾
echo "hello world!" >> hello.txt#输出变量值,会输出hello, Alice
name="Alice"
echo "hello, $name"#使用-e选项启用转义字符解释,有个换行符号,所以会输出 hello
#                                                 world
echo -e "hello\nworld"
输入

read:用于从标准输入读取一行,并将输入赋值给一个或多个变量。

  • -p:在读取输入前显示提示信息。
  • -r:禁止反斜杠转义(原样读取输入)。
  • -n:读取指定的字符数,而不是整行。
  • -s:隐藏输入的字符(适用于输入密码)。
  • -t:设置超时(秒),在超时后读取命令会自动退出。
  • -d:设置定界符,默认是换行符。
#读取一行输入并存储在一个变量中,回车结束输入
read name
echo "Hello, $name"#提示信息,使用 -p 选项在读取前显示提示信息
read -p "Enter your age: " age
echo "You are $age years old."#使用 -r 选项禁止反斜杠转义
read -r -p "Enter a file path: " filepath
echo "The file path is: $filepath"#一次性读取多于一个变量
echo "Enter your first name and last name:"
read firstname lastname
echo "Hello, $firstname $lastname"#设置读取字符数,使用 -n 选项读取指定数量的字符
read -n 4 -p "Enter a 4-digit PIN: " pin
echo "Your PIN is: $pin"#使用 -s 选项隐藏输入(适用于密码)
read -s -p "Enter your password: " password
echo
echo "Your password is stored securely."#设置超时,使用 -t 选项设置读取输入的超时时间(秒)
if read -t 5 -p "Enter your username (5 seconds timeout): " username; thenecho "Hello, $username"
elseecho "Timed out!"
fi#使用 -d 选项设置自定义的定界符(默认是换行符)
read -d ';' -p "Enter input terminated by ';': " input
echo "You entered: $input"#从文件中逐行读取输入
while read line; doecho "Read line: $line"
done < input.txt
变量
普通变量

普通变量用于存储数据,在当前Shell会话或脚本中使用。

my_var="Hello, World!"
number=42
echo $my_var  # 输出: Hello, World!
echo $number  # 输出: 42
环境变量

环境变量是在当前Shell会话及其子进程中都可以使用的变量。它们通常用于配置系统和程序的行为。常见的环境变量:

·PATH:指定可执行文件的搜索路径。

·HOME:当前用户的主目录。

·USER:当前登录的用户名。

·SHELL:当前用户的默认Shell。

·PWD:当前工作目录。

·OLDPWD:前一个工作目录。

#设置环境变量
export MY_ENV_VAR="Some value"
echo $MY_ENV_VAR  # 输出: Some value#添加到PATH
export PATH="/my/custom/dir:$PATH"
位置参数变量
特殊变量
数组变量
关联数组变量

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

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

相关文章

js闭包函数

闭包是指在一个函数内部定义的函数&#xff0c;并且该函数可以访问到外部函数的变量。闭包可以将外部函数的变量保持在内存中&#xff0c;并且不会被释放。 闭包具有以下特性&#xff1a; 1. 函数内部定义的函数可以访问外部函数的变量。 2. 外部函数的变量可以保持在内存中&am…

[大师C语言(第三十九篇)]C语言const关键字深度解析与实战技巧

第一部分&#xff1a;C语言const关键字深度解析 一、const关键字的作用 在C语言中&#xff0c;const关键字是一个用于声明常量的修饰符。它用于指定一个变量的值在程序执行过程中不能被改变。使用const关键字可以确保代码的稳定性&#xff0c;防止不必要的变化&#xff0c;并…

58.鸿蒙系统app(HarmonyOS)(ArkUI)更改应用程序图标

替换xx\MyApplication4.30\entry\src\main\resources\base\media目录下icon.png文件 54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接收发测试_鸿蒙socket连接测试-CSDN博客

『Django』模型入门教程-操作MySQL

theme: smartblue 点赞 关注 收藏 学会了 本文简介 一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中&#xff0c;模型(Model)是用来定义数据库结构的类。每个模型类通常对…

C++之STL(十二)

1、容器适配器 #include <iostream> #include <stack> #include <list> #include <queue> #include <functional> #include <iterator>using namespace std;int main() {// 栈&#xff08;先进后出filo&#xff09;stack<int, list<…

基于PHP的长城景区信息管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的长城景区信息管理系统 一 介绍 此长城景区信息管理系统基于原生PHP开发&#xff0c;数据库mysql。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 浏览长城景区信息(旅…

Unity解决报错:Execution failed for task ‘:unityLibrary:BuildIl2CppTask‘

目录 编辑器版本2020.3.33f1 及 2021.3.15f1 直接导出apk或aar报错(虽然会自动生成temp的AS工程&#xff0c;经过打开验证 也是无解的)&#xff1b; 唯一解决办法&#xff1a;Unity导出As工程没问题&#xff1b; 编辑器版本2020.3.33f1 及 2021.3.15f1 直接导出apk或aar报…

Pytorch-----(6)

一 、问题 如何计算基于不同变量的操作如矩阵乘法。 二、具体实现 0.4版本以前&#xff0c;张量是包裹在变量之中的&#xff0c;后者有三个属性grad、volatile和 requires_grad属性。&#xff08;grad 就是梯度属性&#xff0c;requires_grad属性就是 是否需要存储梯度&#x…

[电子电路学]电路分析基本概念1

第一章 电路分析的基本概念和基本定律 电路模型 反映实际电路部件的主要电磁性质的理想电路元件及其组合&#xff0c;是实际电路电气特性的抽象和近似。 理想电路元件 实际电路器件品种繁多&#xff0c;其电磁特性多元而复杂&#xff0c;分析和计算时非常困难。而理想电路元件…

一款开源、免费、现代化风格的WPF UI控件库

前言 今天大姚给大家分享一款开源&#xff08;MIT License&#xff09;、免费、现代化风格的WPF UI控件库&#xff1a;ModernWpf。 项目介绍 ModernWpf是一个开源项目&#xff0c;它为 WPF 提供了一组现代化的控件和主题&#xff0c;使开发人员能够创建具有现代外观的桌面应…

【pytorch09】数学运算

1.数学操作 add/minus/multiply/dividematmulpowsqrt/rsqrtround 2.加减乘除 加法 矩阵乘法 torch.mm 只适用于2d torch.matmul 要分清楚是矩阵元素相乘&#xff0c;还是矩阵相乘 例子 x一共有4张照片&#xff0c;每张照片打平成784的向量&#xff0c;希望降维得到[4,51…

戴尔笔记本重装系统?笔记本卡顿失灵?一键重装系统!

随着科技的快速发展&#xff0c;笔记本电脑已成为我们日常生活和工作中不可或缺的工具。然而&#xff0c;随着时间的推移&#xff0c;笔记本可能会遇到各种问题&#xff0c;如系统卡顿、失灵等。这时&#xff0c;重装系统往往是一个有效的解决方案。本文将详细介绍如何在戴尔笔…

ONLYOFFICE 8.1编辑器桌面应用程序来袭——在线全面测评

目录 ✈下载✈ &#x1f440;界面&#x1f440; &#x1f44a;功能&#x1f44a; &#x1f9e0;幻灯片版式的重大改进&#x1f9e0; ✂无缝切换文档编辑、审阅和查看模式✂ &#x1f3b5;在演示文稿中播放视频和音频文件&#x1f3b5; &#x1f917;版本 8.1&#xff1a…

一键生成AI动画视频?Animatediff 和 ComfyUI 更配哦!

大家好我是极客菌&#xff01; 之前我分享过 Animatediff 在 WebUI 中的应用&#xff0c;最近不是在分享 ComfyUI 嘛&#xff0c;那我们也来讲讲 Animatediff 在 ComfyUI 的应用。 如果从工作流和内存利用率的角度来说&#xff0c;Animatediff 和 ComfyUI 可能更配一些&#…

大数据面试题之Flume

目录 介绍下Flume Flume架构 Flume有哪些Source 说下Flume事务机制 介绍下Flume采集数据的原理&#xff1f;底层实现&#xff1f; Flume如何保证数据的可靠性 Flume传输数据时如何保证数据一致性&#xff08;可靠性&#xff09; Flume拦截器 如何监控消费型Flu…

深入理解SSH:网络安全的守护者

在当今数字化时代&#xff0c;网络安全已成为全球关注的焦点。随着网络攻击手段的不断升级&#xff0c;保护数据传输的安全性变得尤为重要。SSH&#xff08;Secure Shell&#xff09;作为一种安全的网络协议&#xff0c;为远程登录和网络服务提供了强大的安全保障&#xff0c;成…

大数据面试题之Kafka(3)

目录 Kafka支持什么语义&#xff0c;怎么实现ExactlyOnce? Kafka的消费者和消费者组有什么区别?为什么需要消费者组? Kafka producer的写入数据过程? Kafka producer的ack设署 Kafka的ack机制&#xff0c;解决了什么问题? Kafka读取消息是推还是拉的模式?有什…

Duix - 硅基数字人SDK

简介 Introduction DUIX(Dialogue User Interface System)是硅基智能打造的AI数字人智能交互平台。通过将数字人交互能力开源,开发者可自行接入多方大模型、语音识别(ASR)、语音合成(TTS)能力,实现数字人实时交互,并在Android和iOS多终端一键部署,让每个开发者可轻松…

4A的「A」会变成AI的「A」吗?

戛纳国际创意节上&#xff0c;广告集团WPP的全球CEO Mark Read 和英国CEO Karen Blackett 解释了WPP如何应对AIGC所带来的「威胁」。同时&#xff0c;Mark Read 与Elon Musk对话&#xff0c;讨论「技术创新的变革力量&#xff0c;人工智能如何重塑创造力、商业和社会&#xff0…

C语言 有四个圆塔,圆心分别为

有四个圆塔&#xff0c;圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2)&#xff0c;半径为1&#xff0c;这四个塔的高度为10米&#xff0c;塔以外无建筑物。输入任意一点的坐标&#xff0c;求该点的建筑高度&#xff08;塔以外的高度为零&#xff09;。 #include <stdio.h> …