Shell编程初识

Shell初识

  • Shell
    • Shell 脚本
    • Shell 环境
    • 第一个shell脚本
      • 实例
    • 运行 Shell 脚本方法:
      • 1、作为可执行程序
      • 2、作为解释器参数
      • 3.使用 . (空格)脚本名称来执行
      • 4.使用 source 来执行(主要用于生效配置文件)
      • 区别
      • 1.关于执行权限
      • 2.关于是否开启子shell线程
    • 脚本排错及问题判断
    • shell中的大括号、中括号、小括号的使用详解
        • **shell中的小括号 "( )"的用法:**
        • **shell中的中括号(也叫方括号) "[ ]"的用法**
        • **大括号 {} :**
    • 重定向与引号
      • 重定向符号的用法
      • 三种引号
    • 数值运算的方法
      • 算术运算符
      • expr 的运用
      • echo $[ ]和echo $(( ))
      • let的运用
      • 小数运算
      • bc科学计算工具的运用
      • **基本计算**
      • **浮点数计算**
    • **bc命令在bash脚本中的应用**
    • 未完待续


Shell

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

Shell 环境

Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux 的 Shell 种类众多,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
    在这里插入图片描述

第一个shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell)

输入一些代码,第一行一般是这样:

实例

#!/bin/bash*
echo "Hello World ! "

Hello World !

运行 Shell 脚本方法:

1)使用绝对路径执行。
2)使用相对路径执行。语法格式:./a.sh
3)使用 sh或bash命令来执行。语法格式: sh a.sh 不需要执行权限 -x参数(显示执行过程)
4)使用 . (空格)脚本名称来执行。 语法格式:. a.sh 不需要执行权限(特别注意:第一个.后面有空格)
5)使用 source 来执行。 语法格式:source a.sh 不需要执行权限(主要用于生效配置文件)

下面针对这5种方式,我们一起来看看它们的具体使用方式和区别吧!

1、作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh
bash test.sh

3.使用 . (空格)脚本名称来执行

. test.sh   #注意,点后面有个空格

注:该方式,不需要单独添加x执行权限,它和source类似,权限继承与bash。

4.使用 source 来执行(主要用于生效配置文件)

source test.sh   #该方式多用些操作,被修改后的配置文件(使之重新加载)

区别

1.关于执行权限

仅前两种(相对路径、绝对路径)方法,需要chmod +x test.sh,给脚本单独添加x执行权限。后三种方法,均不需要单独添加x执行权限。

2.关于是否开启子shell线程

前三种方法,脚本执行时会开启一个子shell环境,在子shell执行完后,子shell环境随即关闭,然后又回到当前shell中。

后面两种. 和source方式,则是在当前shell中执行,不会开启子shell。

在这里插入图片描述

脚本排错及问题判断

sh [-nvx] 脚本文件

选项与参数∶

-n:不执行脚本,仅查询语法的问题;

-v:在执行脚本前,先将脚本的内容输出到屏幕上;

-x:将使用到的脚本内容(执行过程)显示到屏幕上

shell中的大括号、中括号、小括号的使用详解

shell中的小括号 "( )"的用法:

() 子shell赋值

在这里插入图片描述

在子shell中变量var值为lookback,但是在上级shell中就不是这个值,可以看出是在子shell中有效的赋值

$()用法
用来执行一条命令

shell中的中括号(也叫方括号) "[ ]"的用法

在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。

my_array=["value1" "value2" "value3"]

条件测试: 中括号用于条件测试,可以用于字符串比较、数值比较等。

bash 的内部命令,[和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。if/test结构中并不是必须右中括号,但是新版的Bash中要求必须这样。

if [ condition ]; then
# commands
fi
大括号 {} :

代码块: 大括号可以用于创建代码块,将一组命令组合在一起。

{
command1
command2
}

扩展: 大括号还可以用于进行扩展,生成一系列字符串。

echo {1..5}
12345

文件重定向: 大括号还可以用于文件重定向。

{ command1; command2; } > output.txt

重定向与引号

重定向符号的用法

重定向符号用于控制命令的输入和输出方向,可以将命令的输出发送到文件、从文件读取输入、追加到文件等。

  • >:将命令的输出重定向到文件,会覆盖文件的内容。
command > output.txt
  • >>:将命令的输出追加到文件,不会覆盖文件的内容。
command >> output.txt
  • <:从文件中读取输入并传递给命令。
command < input.txt
  • 2>: 重定向错误输出的运用
ls abc 2> output.txt
ls abc >output.txt 2>&1
  • 混合输出
ls /opt /xxx &>5.txt

三种引号

  1. 单引号('):
    单引号内的文本会被视为纯粹的字符串,不会对其中的特殊字符进行解释或替换。这意味着,
    单引号中的变量引用、命令替换等都会被直接原样输出。
    例如, ‘Hello $USER’ 会被直接解释为字符串"Hello $USER",而不会将‘USER`替换为当前
    用户名。
    单引号适用于保留字符串中的特殊字符的字面意义。
  2. 双引号("):
    双引号内的文本会进行变量引用和命令替换。也就是说,双引号内的变量会被解释为其对应的
    值,命令替换中的命令会被执行,并将结果嵌入到字符串中。
    例如, “Hello $USER” 会被解释为"Hello"后跟当前用户名。
    双引号适用于需要对字符串中的变量进行扩展或替换的情况。
  3. 反引号(`):
    反引号用于命令替换,即将反引号中的命令执行,并将结果返回到外部命令中。
    例如, date 会被替换为当前日期和时间。
    在现代的Shell中,建议使用更加可读性更好的$(command) 语法来代替反引号。

数值运算的方法

算术运算符

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
+加法expr $a + $b 结果为 30。
-减法expr $a - $b 结果为 -10。
*乘法expr $a \* $b 结果为 200。
/除法expr $b / $a 结果为 2。
%取余expr $b % $a 结果为 0。
=赋值a=$b 把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

expr 的运用

格式:expr 数值1 运算符 数值2 [运算符 数值3]…

echo $[ ]和echo $(( ))

格式:
echo $((数值 运算符 数值))
echo $[数值 运算符 数值]

let的运用

格式:let 变量=<数值>运算符<数值>
运算符与echo $[ ]相同

小数运算

bc科学计算工具的运用

Bash内置了对整数运算的支持,但是并不支持浮点运算,而 bc 计算器可以很方便的进行浮点运算。

  • 支持交互式和非交互式两种方式。
  • 使用scale=n可以指定精度(运算中包含除法才生效),即小数点后的位数。要写在算术表达式之前。

基本计算

bc命令的基本使用方法是在终端中直接输入表达式,然后按下回车键即可得到结果。比如,我们可以执行以下命令进行简单的加法计算:

$ bc
3 + 5

执行以上命令后,bc会输出计算结果:

8

浮点数计算

bc命令默认情况下是整数计算,如果要进行浮点数计算,需要使用"scale"变量设置小数点后的位数。例如,我们可以执行以下命令进行浮点数除法计算:

$ bc
scale=2
7 / 3

输出结果为:

2.33

bc命令在bash脚本中的应用

bc命令在bash脚本中非常实用,特别适合处理需要精确计算的数学运算。由于bash本身只支持整数运算,所以当我们需要进行浮点数计算时,就可以使用bc命令来解决这个问题。下面是一个简单的例子,演示了bc命令在bash脚本中的应用:

#!/bin/bash# 定义变量
a=5
b=3# 使用bc命令进行浮点数计算
result=$(echo "scale=2; $a / $b" | bc)# 输出结果
echo "结果为:$result"

执行以上脚本,将输出结果:

结果为:1.66

未完待续

在这里插入图片描述

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

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

相关文章

LLM推理参数(top_k,top_p, temperature, num_beams)

正常LLM做 next token predicate 时&#xff0c;对输出的 logits 做 softmax&#xff0c;选择概率最大的token。 num_beams &#xff1a;当我们设置 num_beams2 后&#xff0c;就使用了 beam search 的方法&#xff0c;每次不是只直接选择概率最大的 token&#xff0c;而是保留…

三子棋游戏----C语言版【超级详细 + 视频演示 + 完整源码】

㊙️小明博客主页&#xff1a;➡️ 敲键盘的小明 ㊙️ ✅关注小明了解更多知识☝️ 文章目录 前言一、三子棋的实现思路二、三子棋的实现步骤2.1 先显示游戏的菜单2.2 游戏的具体实现2.2.1 棋盘的初始化2.2.2 展示棋盘2.2.3 下棋&#x1f534;玩家下棋&#x1f534;电脑下棋2.2…

申请SSL证书

有很多方法可以确保您的网站安全。添加SSL证书可针对恶意攻击提供额外且关键的保护层。 即使网站不接受交易&#xff0c;您仍然需要保护用户的登录详细信息、地址和其他个人信息。 没有SSL证书的网站使用HTTP&#xff08;一种基于文本的协议&#xff09;&#xff0c;这意味着…

网络编程套接字应用分享【Linux C/C++ 】【UDP应用 | TCP应用 | TCP线程池小项目】

目录 前提知识 1. 理解源ip&#xff0c;目的ip和Macip 2. 端口号 3. 初识TCP&#xff0c;UDP协议 4. 网络字节序 5. socket 编程 sockaddr类型 一&#xff0c;基于udp协议编程 1. socket——创建套接字 2. bind——将套接字强绑定 3. recvfrom——接受数据 4. s…

AI跟踪报道第36期-新加坡内哥谈技术-这周的AI新闻铺天盖地

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

从多模态生物图数据中学习Gene的编码-MuSeGNN

由于数据的异质性&#xff0c;在不同的生物医学背景下发现具有相似功能的基因对基因表示学习提出了重大挑战。在本研究中&#xff0c;作者通过引入一种称为多模态相似性学习图神经网络的新模型来解决这个问题&#xff0c;该模型结合了多模态机器学习和深度图神经网络&#xff0…

JS 利用 webcam访问摄像头 上传到服务器

webcam JS 较为详细的指南 定义标题 <!doctype html> <html> <head><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>How to capture picture from webcam with Webcam.js</title></…

stm32开发之threadx使用记录(主逻辑分析)

前言 threadx的相关参考资料 论坛资料、微软官网本次使用的开发板为普中科技–麒麟&#xff0c;核心芯片为 stm32f497zgt6开发工具选择的是stm32cubemx(代码生成工具)clion(代码编写工具)编译构建环境选择的是arm-none-gcc编译 本次项目结构 CMakeList对应的配置 set(CMAKE_…

Thinkphp5萤火商城B2C小程序源码

源码介绍 Thinkphp5萤火商城B2C小程序源码&#xff0c;是一款开源的电商系统&#xff0c;为中小企业提供最佳的新零售解决方案。采用稳定的MVC框架开发&#xff0c;执行效率、扩展性、稳定性值得信赖。 环境要求 Nginx/Apache/IIS PHP5.4 MySQL5.1 建议使用环境&#xff…

微信小程序开发学习笔记——4.6tabBar底部tab栏配置用法

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 一、tabBar https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar 二、icon下载 https://www.iconfont.cn/collections/index?spma…

C++学习——指针篇

本篇文章记录我学习C的指针内容&#xff0c;希望我的分享能给你带来不一样的收获&#xff01; 目录 一、指针有什么好处 二、什么是指针 三、C指针内容详解 &#xff08;一&#xff09;、空指针&#xff08;Null&#xff09; &#xff08;二&#xff09;、指针的算数运算 …

DL00198-基于3DUnet的脑肿瘤语义分割完整代码+数据集含输出结果

完整代码数据集见文末 3DUNet是一种卷积神经网络&#xff08;CNN&#xff09;&#xff0c;专为处理3D图像而设计。它基于U-Net架构&#xff0c;是一种对称的卷积网络&#xff0c;具有上采样和下采样的过程。PyTorch 3DUNet在U-Net的基础上添加了更多的卷积层和跳跃连接&#xf…

在git上先新建仓库-把本地文件提交远程

一.在git新建远程项目库 1.选择新建仓库 以下以gitee为例 2.输入仓库名称&#xff0c;点击创建 这个可以选择仓库私有化还公开权限 3.获取仓库clone链接 这里选择https模式就行&#xff0c;就不需要配置对电脑进行sshkey配置了。只是需要每次提交输入账号密码 二、远…

网站基本建设基本上步骤

网站基本建设基本上步骤 一.领取一个免费域名和SSL证书&#xff0c;和CDN 1.打开网站链接&#xff1a;https://www.rainyun.com/ycpcp_ 首先创建一个CDN&#xff0c;这里以我加速域名“cdntest.biliwind.com 1”为例 这里就要填写 cdntest.biliwind.com 1 &#xff0c;而不是…

4.1 JavaScript的使用

JavaScript有两种使用方式&#xff1a;一是在HTML文档中直接添加代码&#xff1b;二是将JavaScript脚本代码写到外部的JavaScript文件中&#xff0c;再在HTML文档中引用该文件的路径地址。 这两种使用方式的效果完全相同&#xff0c;可以根据使用率和代码量选择相应的开发方式。…

Qt5.15以上版本在线安装步骤,可选择更多早期版本

以ubuntu系统为例&#xff1a; 1、先去下载在线安装程序&#xff1a; https://download.qt.io/official_releases/online_installers/ 选择合适的版本&#xff0c;这里是在x64机器的ubuntu虚拟机里安装QT&#xff0c;所以选择如下版本&#xff1a; 或者直接在终端执行如下命令…

Qt | 元对象系统

一、QByteArray 类简介 1、QByteArray 类简介  该类是一个用于处理字符串的类似于 C++的 string 类型的类,在 Qt 中,对字符串的处理,经常使用的是 QString 类,该类保证字符串以\0结尾,并使用隐式共享(copy-on-write)来减少内存用量和不必要的数据复制。  QByteArra…

【ControlNet v3版本论文阅读】

网络部分最好有LDM或者Stable Diffusion的基础&#xff0c;有基础的话会看的很轻松 Abstract 1.提出了一种网络结构支持额外输入条件控制大型预训练的扩散模型。利用预训练模型学习一组不同的条件控制。 2.ControlNet对于小型&#xff08;<50k&#xff09;或大型&#xff…

Halcon的HWindowControl控件在C#WinForm中的使用介绍(包括绘制ROI)

Halcon的HSmartWindowControl控件在C#WinForm中的使用介绍&#xff08;包括绘制ROI&#xff09; 文章目录 Halcon的HSmartWindowControl控件在C#WinForm中的使用介绍&#xff08;包括绘制ROI&#xff09;一、 引入hSmartWindowControl控件二、 编写打开图像功能三、 编写绘制RO…

操作系统②——内存管理

1. 栈、堆 1.1 程序的内存分配 栈区&#xff08;stack&#xff09;&#xff1a;由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其操作方式类似于数据结构中的栈。堆区&#xff08;heap&#xff09;&#xff1a;一般由程序员分配释放&#x…