shell编程

shell学习教程(超详细完整) 为了方便以后工作和复习,记录一下学习shell脚本的笔记,看这篇文章需要对linux系统熟悉 文章目录一、什么是shell?为什么要学习和使用shell?二、shell的分类shell脚本的执行三、shell变量1.变量的命名规则:2.变量的分类:2.1用户自定义变量:2.1.1变量定义2.1.2变量调用2.1.3变量查看2.1.4变量删除2.2环境变量:1)环境变量设置2)环境变量查询和删除3)系统默认环境变量2.3位置参数变量:2.4预定义变量:3.只读变量:4.接受键盘输入:四、shell 运算符1. 阅读详情
在这里插入图片描述

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。
📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看
📙Java并发编程系列,设计模式系列、go web开发框架 系列正在发展中,喜欢Java,GoLang,Rust,的朋友们可以关注一下哦!


走进 Shell 编程的大门

为什么要学 Shell?

学一个东西,我们大部分情况都是往实用性方向着想。从工作角度来讲,学习 Shell 是为了提高我们自己工作效率,提高产出,让我们在更少的时间完成更多的事情。
目前 Linux 系统下最流行的运维自动化语言就是 Shell 和 Python 了。

两者之间,Shell 几乎是 IT 企业必须使用的运维自动化编程语言,特别是在运维工作中的服务监控、业务快速部署、服务启动停止、数据备份及处理、日志分析等环节里,shell 是不可缺的。Python 更适合处理复杂的业务逻辑,以及开发复杂的运维软件工具,实现通过 web 访问等。Shell 是一个命令解释器,解释执行用户所输入的命令和程序。一输入命令,就立即回应的交互的对话方式。

什么是 Shell?

简单来说“Shell 编程就是对一堆 Linux 命令的逻辑化处理”。
在这里插入图片描述

Shell 编程的 Hello World

学习任何一门编程语言第一件事就是输出 HelloWorld 了!下面我会从新建文件到 shell 代码编写来说下 Shell 编程如何输出 Hello World。

(1)新建一个文件 helloworld.sh ,扩展名为 sh(sh 代表 Shell)

(2) 使脚本具有执行权限:chmod +x helloworld.sh

(3) 使用 vim 命令修改 helloworld.sh open in new window 文件:vim helloworld.sh (vim 文件------>进入文件----->命令模式------>按 i 进入编辑模式----->编辑文件 ------->按 Esc 进入底行模式----->输入:wq/q! (输入 wq 代表写入内容并退出,即保存;输入 q!代表强制退出不保存。))

helloworld.sh open in new window 内容如下:

#!/bin/bash
#第一个shell小程序,echo 是linux中的输出命令。
echo "helloworld!"

shell 中 # 符号表示注释。shell 的第一行比较特殊,一般都会以#!开始来指定使用的 shell 类型。

(4) 运行脚本:./helloworld.sh 。

Shell 变量

Shell 编程中的变量介绍
Shell 编程中一般分为三种变量:

  • 我们自己定义的变量(自定义变量): 仅在当前 Shell 实例中有效,其他 Shell 启动的程序不能访问局部变量。
  • Linux 已定义的环境变量 (环境变量, 例如:PATH , ​HOME 等…, 这类变量我们可以直接使用),使用 env 命令可以查看所有的环境变量,而 set 命令既可以查看环境变量也可以查看自定义变量。
  • Shell 变量 :Shell 变量是由 Shell 程序设置的特殊变量。Shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 Shell 的正常运行

常用的环境变量:

  • PATH 决定了 shell 将到哪些目录中寻找命令或程序
  • HOME 当前用户主目录
  • HISTSIZE  历史记录数
  • LOGNAME 当前用户的登录名
  • HOSTNAME  指主机的名称
  • SHELL 当前用户 Shell 类型
  • LANGUAGE  语言相关的环境变量,多语言可以修改此环境变量
  • MAIL  当前用户的邮件存放目录
  • PS1  基本提示符,对于 root 用户是#,对于普通用户是$

使用 Linux 已定义的环境变量:

比如我们要看当前用户目录可以使用:echo $HOME 命令;如果我们要看当前用户 Shell 类型 可以使用echo $SHELL 命令。可以看出,使用方法非常简单。

使用自己定义的变量:

#!/bin/bash
#自定义变量hello
hello="hello world "
echo  $hello
echo  "helloworld!"

结果

hello world
helloworld!

Shell 编程中的变量名的命名的注意事项:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头,但是可以使用下划线(_)开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用 bash 里的关键字(可用 help 命令查看保留关键字)。

Shell 字符串入门

字符串是 shell 编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号。

在单引号中所有的特殊符号,如和反引号都没有特殊含义。在双引号中,除了和反引号都没有特殊含义。在双引号中,除了"“、”"、反引号和感叹号(需开启 history expansion),其他的字符没有特殊含义

单引号字符串:

#!/bin/bash
name='SnailClimb '
hello='Hello, I am $name!'
echo $hello

输出内容:

Hello, I am $name!

双引号字符串:

#!/bin/bash
#!/bin/bash
name='SnailClimb '
hello="Hello, I am $name!"
echo $hello

输出内容:

Hello, I am SnailClimb !

Shell 字符串常见操作
拼接字符串:

#!/bin/bash
name="SnailClimb"
# 使用双引号拼接
greeting="hello, "$name" !"
greeting_1="hello, ${name} !"
echo $greeting  $greeting_1
# 使用单引号拼接
greeting_2='hello, '$name' !'
greeting_3='hello, ${name} !'
echo $greeting_2  $greeting_3
···           
                            
输出结果:
```shell
hello, SnailClimb ! hello, SnailClimb !
hello, SnailClimb ! hello, ${name} !

获取字符串长度:

#!/bin/bash
#获取字符串长度
name="SnailClimb"
# 第一种方式
echo ${#name} #输出 10
# 第二种方式
expr length "$name";

输出结果:

10
10

使用 expr 命令时,表达式中的运算符左右必须包含空格,如果不包含空格,将会输出表达式本身:

expr 5+6    // 直接输出 5+6
expr 5 + 6       // 输出 11

对于某些运算符,还需要我们使用符号\ 进行转义,否则就会提示语法错误。

expr 5 * 6       // 输出错误
expr 5 \* 6      // 输出30

截取子字符串:

简单的字符串截取:

#从字符串第 1 个字符开始往后截取 10 个字符
str="SnailClimb is a great man"
echo ${str:0:10} #输出:SnailClimb

根据表达式截取:

#!bin/bash
#author:amau
var="https://www.runoob.com/linux/linux-shell-variable.html"
# %表示删除从后匹配, 最短结果
# %%表示删除从后匹配, 最长匹配结果
# #表示删除从头匹配, 最短结果
# ##表示删除从头匹配, 最长匹配结果
# 注: *为通配符, 意为匹配任意数量的任意字符
s1=${var%%t*} #h
s2=${var%t*}  #https://www.runoob.com/linux/linux-shell-variable.h
s3=${var%%.*} #https://www
s4=${var#*/}  #/www.runoob.com/linux/linux-shell-variable.html
s5=${var##*/} #linux-shell-variable.html

Shell 数组

bash 支持一维数组(不支持多维数组),并且没有限定数组的大小。我下面给了大家一个关于数组操作的 Shell 代码示例,通过该示例大家可以知道如何创建数组、获取数组长度、获取/删除特定位置的数组元素、删除整个数组以及遍历数组。

#!bin/bash
var="https://www.runoob.com/linux/linux-shell-variable.html"
# %表示删除从后匹配, 最短结果
# %%表示删除从后匹配, 最长匹配结果
# #表示删除从头匹配, 最短结果
# ##表示删除从头匹配, 最长匹配结果
# 注: *为通配符, 意为匹配任意数量的任意字符
s1=${var%%t*} #h
s2=${var%t*}  #https://www.runoob.com/linux/linux-shell-variable.h
s3=${var%%.*} #https://www
s4=${var#*/}  #/www.runoob.com/linux/linux-shell-variable.html
s5=${var##*/} #linux-shell-variable.html

Shell 基本运算符

Shell 编程支持下面几种运算符

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符
  • 算数运算符
  • 算数运算符

算数运算符

在这里插入图片描述

#!/bin/bash
a=3;b=3;
val=`expr $a + $b`
#输出:Total value : 6
echo "Total value : $val"

关系运算符

在这里插入图片描述

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

shell关系运算符
shell关系运算符
通过一个简单的示例演示关系运算符的使用,下面 shell 程序的作用是当 score=100 的时候输出 A 否则输出 B。

#!/bin/bash
a=3;b=3;
val=`expr $a + $b`
#输出:Total value : 6
echo "Total value : $val"

逻辑运算符

在这里插入图片描述

#!/bin/bash
a=$(( 1 && 0))
# 输出:0;逻辑与运算只有相与的两边都是1,与的结果才是1;否则与的结果是0
echo $a;

布尔运算符

在这里插入图片描述

字符串运算符

简单示例:

#!/bin/bash
a="abc";
b="efg";
if [ $a = $b ]
then
   echo "a 等于 b"
else
   echo "a 不等于 b"
fi

输出:

a 不等于 b

文件相关运算符

在这里插入图片描述

使用方式很简单,比如我们定义好了一个文件路径file="/usr/learnshell/test.sh " 如果我们想判断这个文件是否可读,可以这样if [ -r $file ] 如果想判断这个文件是否可写,可以这样-w $file ,是不是很简单。

Shell 流程控制

if 条件语句

简单的 if else-if else 的条件语句示例

#!/bin/bash
a=3;
b=9;
if [ $a -eq $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
else
   echo "a 小于 b"
fi

输出结果:

a 小于 b

for 循环语句

通过下面三个简单的示例认识 for 循环语句最基本的使用,实际上 for 循环语句的功能比下面你看到的示例展现的要大得多。

输出当前列表中的数据:

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

产生 10 个随机数:

#!/bin/bash
for i in {0..9};
do
   echo $RANDOM;
done

输出 1 到 5:

通常情况下 shell 变量调用需要加 $,但是 for 的 (()) 中不需要,下面来看一个例子:

#!/bin/bash
length=5
for((i=1;i<=length;i++));do
    echo $i;
done;

while 语句

基本的 while 循环语句:

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

while 循环可用于读取键盘信息:

echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的电影: '
while read FILM
do
    echo "是的!$FILM 是一个好电影"
done

Shell 函数

不带参数没有返回值的函数

#!/bin/bash
hello(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
hello
echo "-----函数执行完毕-----"

输出结果:

-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----

有返回值的函数
输入两个数字之后相加并返回结果:

#!/bin/bash
funWithReturn(){
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $?"

输出结果:

输入第一个数字:
1
输入第二个数字:
2
两个数字分别为 1 和 2 !
输入的两个数字之和为 3

带参数的函数

#!/bin/bash
funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

输出结果:

 第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
Shell学习从入门到精通(一) 本章重点讲解变量内容 阅读详情

相关推荐

shell从入门到精通(只需要这篇就够了)

在Unix-like系统中,Shell 是用户与操作系统内核之间的一个重要接口,它允许用户通过命令行或脚本与系统进行交互和控制。Shell 变量是 Shell 编程中的基础概念之一,它们允许我们存储和操作数据,是编写灵活脚本和命令行操作的关键。Shell 变量是用来存储数据的命名位置。每个变量都有一个名称(标识符)和一个对应的值。在 Shell 中,变量可以存储字符串、数字或任何有效的数据类型。

wsrzsfgst的博客 9482

学习shell,这一篇就够了(shell基础)

一、shell概述 1、什么是shell shell是一种命令语言,是为使用者提供操作界面的一种软件,软件可以接收用户的命令,并且执行用户输入的命令,然后对相应的程序进行调用。 2、shell可以分为两种方式 1)shell命令行式 例如一些系统linux,从传统的意义上来说,如果不去注明的话,shell一般是命令行式。shell是传统操作和外部的接口,shell是操作系统的最外层,并且管理用户和操作系统之间的交互,操作系统完成用户的操作,并且处理输出结果。shell实现了用户和系统之间的交互,用户在键盘上

Linux爱好者的博客 1万+

Linux Shell编程

​ Shell是一个命令行解释器程序规范,他接受应用程序/用户命令,然后调用操作系统内核完成相关的功能。它是用户使用 Linux 的桥梁。简单来说Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。也可以这样认为,linux中的shell就是linux内核的一个外层保护工具,并负责完成用户与内核之间的交互​ Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。

Casual_Lei的博客 1594

超详细shell脚本编程快速入门

文章目录 1.shell简介 1.1 什么是shell 1.2 shell脚本 1.3 运行shell脚本 1.4 shell注释 1.5 shell编写的基本步骤 2.shell变量 2.1 命名变量 2.2 使用变量 2.3 变量类型 2.4 变量操作 3.shell字符串 3.1 字符串类型 3.2 字符串操作 4.shell数组 4.1 定义数组 4.2 数组操作 5.shell传递参数 6.shell运算符

qinjie的博客 9万+

Flutter加载本地HTML的优雅解决方案:轻松实现富文本展示

通过以上步骤,我们实现了Flutter加载本地HTML的完整流程,并简单介绍了如何通过WebView与HTML页面进行交互。HTML文件作为一种灵活、易维护的富文本展示方式,能有效提升Flutter应用的内容呈现能力。这种方法在展示新闻、资讯或帮助文档等内容时非常有用,能够让开发者灵活调整内容的样式和排版。希望这篇文章能对你在Flutter开发中的HTML加载有所帮助!

四楼没电梯的专栏 3644

cadence capture CIS 之使用access创建数据库(.mdb)

cadence capture CIS 之使用access创建数据库(.mdb)准备工作新建数据库 准备工作 1、一台电脑; 2、安装 Microsoft access database; 新建数据库 打开你准备创建数据库的位置,右键单击——》新建——》 Microsoft access database(注意:文件格式要选*.mdb) 打开数据库文件,创建——》表; 对数据表进行编辑,编辑表头、编辑表的内容、增加表的数量; 编辑表头:选中要编辑的表——》表设计 编辑内容:类似于excel添

weixin_42256550的博客 3147

SHELL编程——初识SHELL编程

一、什么是SHELL编程? Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文件,以及启动和控制其他程序。Shell通过提示您输入,向操作系统解释该输出,然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。 简单来说,Shell就是一个用户跟操作系统之间的一个命令解释器。Shell是用户与Linux操作系统之间沟通的桥梁,用户可以输入命令执行,又可以利用Shell脚本编程去运行。 二、常见Shell Linux Shell种类非常多,常见的有:Bourne Shell

xcxhzjl的博客 1373

STM32F4驱动ES8388音频芯片的I²S时钟与DMA流设计

I²S(Inter-IC Sound)是一种广泛应用于嵌入式音频系统的同步串行总线协议,其核心在于精确的时钟同步与稳定的数据流传输。理解I²S时钟树结构(含MCLK、SCLK、WS生成逻辑)和分频机制,是保障CD级音质(如44.1kHz/16bit)的基础;而DMA双缓冲技术则解决了实时音频播放中数据供给连续性的关键工程问题。在STM32F4等Cortex-M4平台中,需协同配置PLLI2S锁相环、I²S预分频寄存器(I2SxPR)及DMA循环模式,同时兼顾ES8388等Codec芯片的I²C初始化时序与寄

weixin_35390379的博客 244

Shell编程

Shell编程基础概述 Shell是一种命令语言和程序设计语言,通过Shell可以访问操作系统内核服务。本文介绍了Shell编程的基本概念和常用操作: Shell简介:Shell类似DOS下的command,既是一种命令语言又是程序设计语言,常用bash作为默认解释器。 脚本编写与执行:通过vi创建.sh文件,使用#!指定解释器,用echo输出内容,需赋予执行权限后通过./或解释器执行。 变量使用:变量名=值形式定义,使用$引用变量,支持局部/全局变量,可用readonly设为只读或unset删除。

LJC_Superman的博客 2290

LaMAR数据集下载和使用流程

LaMAR数据集

qq_51745206的博客 971

一文学会python基础知识

1. python 运行环境 1.1 脚本式环境 1.2 交互式环境 2. python 注释 3. 变量及变量命名 4. 关键词 BIFS 5. 标准操作符 6. 条件判断 7. 循环 8. python 数据类型 9. python 序列 9.1 序列-字符串(str) 9.2 序列-列表 9.3 序列-元组 10. 字典 11. 集合 12. python内存管理及可变、不可变对象 13. 函数 13.1 函数参数 13.2 return and yiled(生成器) 13.3 参数传递处理 ...

weixin_43178406的博客 26万+

Shell编程入门

文章目录Shell 编程入门走进 Shell 编程的大门为什么要学Shell?什么是 Shell?Shell 编程的 Hello WorldShell 变量Shell 编程中的变量介绍Shell 字符串入门Shell 字符串常见操作Shell 数组Shell 基本运算符算数运算符关系运算符逻辑运算符布尔运算符字符串运算符文件相关运算符shell流程控制if 条件语句for 循环语句while 语句shell 函数不带参数没有返回值的函数有返回值的函数带参数的函数 Shell 编程入门 走进 Shell 编程

qq_38106680的博客 725

Linux 服务器上部署 OpenClaw完整教程

2. 全局安装 OpenClaw 3. 初始化配置 配置模型提供商 方式一:使用配置命令(推荐) 方式二:直接编辑配置文件 在 部分添加: 配置多个模型提供商 如果你使用 Antigravity 本地代理,可以同时配置多个模型: 配置飞书集成 1. 创建飞书应用 访问 飞书开放平台 创建企业自建应用 记录 App ID 和 App Secret 2. 配置应用权限 在飞书开放平台,为应用添加以下权限:重要: 必须使用 长连接(WebSocket) 模式,不要使用 HTTP 回调!在飞书开放

Maynor的博客 5249

Shell编程总结

1.Shell编程简介 Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文件,以及启动和控制其它程序。Shell通过提示您输入,向内核解释该输入,然后处理来自内核的任何结果输出。 简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。 Linux Shell种类非常多,常见的SHELL如下: Bourne Shell(/usr/bin/sh或...

dengyu7227的专栏 288

【ComfyUI】【Nunchaku】【diffusers报错解决】秋叶整合包安装 Nunchaku 报错的解决方法

最近在折腾 AI 绘图时,我尝试在秋叶的 ComfyUI 整合包中安装 `ComfyUI-nunchaku` 插件(版本 0.3.3),结果启动后直接报错,提示无法从 `accelerate.utils.memory` 中导入 `clear_device_cache`,让我一度怀疑插件是否兼容。查阅了一堆 issue 和源码之后,总算找到了原因和解决方法。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1856

用「OpenClaw」打造新媒体运营神器:小红书/公众号全自动选题→创作→排版→发布全流程

对于新媒体运营的从业者来说,AI不是要取代运营人员,而是把他们从繁琐的重复劳动中解放出来,专注于更核心的内容策略、用户运营、品牌建设,这才是AI在传统行业落地的真正价值。这是最终输出可发布内容的核心智能体,我们通过「OpenClaw」的Prompt工程,结合不同平台的排版规范,实现了一键生成符合要求的排版,完全替代人工重复劳动。这套系统的落地,不是技术的炫技,而是真正用AI解决了新媒体运营的核心痛点:用自动化替代重复的人工劳动,用数据决策替代经验主义,用全闭环执行替代纸上谈兵的建议。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 198

Shell编程简介

Shell在计算机科学中是指为使用者提供操作界面的软件,即命令解析器,类似于windows下的cmd.exe,接收用户命令并调用应用程序。Shell俗称壳,用于区别于核,它作为用户与操作系统内核之间的桥梁,让用户能通过简单命令操作复杂的系统。

ZZH1120KQ的博客 1352

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: iced 入门一
下一篇: 注解annotation
过去日记
过去日记 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄3年 5342粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过去日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值