Shell学习(1/6) 教程-变量

Educoder头歌-shell脚本入门——变量、字符串 阅读详情

一、教程

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

常见的 Shell 类型:

  1. Bash (Bourne Again Shell):是最常见的 Linux 和 macOS 默认 Shell,功能强大且易用。
  2. sh (Bourne Shell):经典的 Unix Shell,许多其他 Shell 都是基于它扩展的。
  3. zsh (Z Shell):功能强大的 Shell,比 Bash 更加灵活,支持自动补全和更强的脚本功能。
  4. fish (Friendly Interactive Shell):注重易用性和交互性,提供了丰富的提示和补全功能。
  5. csh (C Shell):语法和 C 语言类似,曾在一些早期的 Unix 系统中广泛使用。

第一个shell脚本

1.使用 nano 创建脚本

  1. 打开终端。
  2. 输入以下命令来创建并编辑脚本:

nano myscript.sh
3. 输入您的脚本内容。例如
#!/bin/bash echo "Hello, World!"

  1. 按 Ctrl + O 保存文件,然后按 Enter 确认文件名。
  2. 按 Ctrl + X 退出编辑器。

2. 赋予脚本执行权限

chmod +x myscript.sh
使脚本变为可执行文件。

3. 运行脚本

如果脚本位于当前目录:

./myscript.sh

如果脚本不在当前目录,您需要提供脚本的完整路径:

/path/to/myscript.sh

4. 运行结果

Hello, World!

二、Shell 变量

在 Shell 编程中,变量是用于存储数据值的名称。
变量名的命名须遵循如下规则:

  • 只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。
  • 不能以数字开头: 变量名不能以数字开头,但可以包含数字。
  • 避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
  • 使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。
  • 避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
  • 避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。

1. 使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

#!/bin/bash
my_name="xaye"
echo ${my_name}
echo $my_name

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,和Kotlin类似。

2. 只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

#!/bin/bash

myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com"

运行脚本,结果如下:

./myscript.sh: line 4: myUrl: readonly variable

3. 删除变量

使用 unset 命令可以删除变量。语法:
unset variable\_name
变量被删除后不能再次使用。unset 命令不能删除只读变量。

#!/bin/sh

myUrl="https://www.runoob.com"
unset myUrl
echo $myUrl

执行将没有任何输出。

xaye@PS2022YZEUYRLD:/mnt/e/Android-NDK-C/sh$ ./myscript.sh

xaye@PS2022YZEUYRLD:/mnt/e/Android-NDK-C/sh$

4. 变量类型

4.1 字符串变量
存储字符或字符串,默认情况下 Shell 中的变量都被视为字符串类型。

name="Xaye"
greeting="Hello, ${name}!"
echo $greeting
  • 不需要声明类型。
  • 使用双引号可以防止空格或特殊字符被误解释。
  • 使用单引号禁止变量替换。

4.2 数组变量
用于存储多个值(下标从 0 开始)。
定义:array=(value1 value2 value3)
访问元素:echo ${array[0]} # 输出第一个元素
操作数组:
获取所有元素: ${array[@]} 或 ${array[\*]}
获取数组长度: ${#array[@]}
示例:

colors=("red" "green" "blue")
echo ${colors[1]}       # 输出 green
echo ${colors[@]}       # 输出 red green blue
echo ${#colors[@]}      # 输出 3

4.3 整数变量
用于存储和操作整数值(需要指定计算模式)。

num=42

算术运算:
使用 $((expression)) 进行整数运算。

num=$((5 + 10))
echo $num  # 输出 15

增加或减少:

num=$((num + 1))
echo $num  # 输出 16

注意:默认情况下,Shell 不支持浮点运算,可借助 bc 或其他工具实现。

4.4 环境变量
系统级变量,影响系统环境或子进程行为。
常见环境变量:

  • $PATH:可执行文件的搜索路径。
  • $HOME:用户的主目录。
  • $USER:当前登录的用户名。
  • $SHELL:当前使用的 Shell 类型。

操作环境变量:
查看当前环境变量:

    env

设置新的环境变量:

    export VAR="value"

查看某个变量:

    echo $VAR

4.5 特殊变量
Shell 内置的特殊变量,用于存储命令、脚本参数或运行状态信息。

  • 常见特殊变量:
    • $0:当前脚本或命令名。
    • $1, $2, ...:命令行参数。
    • $@:所有参数(逐个分开)。
    • $\*:所有参数(作为一个字符串)。
    • $#:参数个数。
    • $?:上一个命令的退出状态。
    • $$:当前 Shell 的进程 ID。
    • $!:最近运行的后台任务的进程 ID。

4.6 总结

类型说明示例
字符串变量存储字符或字符串,Shell 默认变量类型。name="Alice";echo "Hello, $name!"
数组变量存储多个值,支持索引访问及操作。array=(val1 val2);echo ${array[0]}
整数变量存储和操作整数,支持算术运算。num=$((5 + 3));echo $num
环境变量系统级变量,影响系统环境或子进程。$PATH, $HOME, export VAR=value
特殊变量内置变量,用于存储命令、参数及状态信息。$@, $\*, $?, $$, $!

5. Shell 字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
5.1 单引号
内容完全原样输出,变量或特殊字符不会被解析。

str='Hello $USER'
echo $str  # 输出:Hello $USER

5.2 双引号
支持变量和特殊字符的解析。

name="Xaye"
greeting="Hello, $name!"
echo $greeting  # 输出:Hello, Xaye!

5.3 拼接字符串

name="Xaye"
full_greeting="Hello, "$name"!"
echo $full_greeting  # 输出:Hello, Xaye!

5.4 获取字符串长度
使用 ${#变量名} 获取字符串的长度:

str="Hello, World"
echo ${#str} # 输出:12

5.5 提取字符串
使用 ${变量名:起始位置:长度} 提取子字符串:

str="Hello, World"
echo ${str:7:5}  # 输出:World

起始位置从 0 开始;如果只指定起始位置,则提取到字符串末尾。

echo ${str:7}  # 输出:World

5.6 查找字符串
使用 expr index 或内置方法查找子字符串的位置。
示例 1: expr 方法:

str="Hello, World"
echo $(expr index "$str" W)  # 输出:8

示例 2:内置查找:

str="Hello, World"
echo ${str%%W*}  # 输出:Hello, 

6. Shell 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。
6.1 定义数组
用括号 () 定义数组,数组元素用空格分隔。

arr=(value1 value2 value3)

单独赋值:可以为特定下标的元素单独赋值。

arr[0]="value1"
arr[1]="value2"
arr[2]="value3"

6.2 读取数组
读取单个元素:通过下标访问数组元素(下标从 0 开始)。

echo ${arr[0]}  # 输出:value1

读取所有元素:使用 ${数组名[@]} 或 ${数组名[\*]}。

echo ${arr[@]}  # 输出:value1 value2 value3
运行:
xaye@PS2022YZEUYRLD:/mnt/e/Android-NDK-C/sh$ ./myscript.sh
value1 value2 value3

6.3 获取数组的长度
语法: ${#数组名[@]}

echo ${#arr[@]}  # 输出:3

示例代码

# 定义数组
fruits=("apple" "banana" "cherry")

# 读取单个元素
echo ${fruits[1]}  # 输出:banana

# 读取所有元素
echo ${fruits[@]}  # 输出:apple banana cherry

# 获取数组长度
echo ${#fruits[@]}  # 输出:3

7. Shell 注释

7.1 单行注释
使用 # 开头,表示该行的内容是注释,不会被执行。

# 这是一个单行注释
echo "Hello, World!"  # 输出内容

7.2 多行注释
Shell 不支持原生的多行注释,但可以通过以下方法实现:

  • 连续使用 #** 注释多行**:
# 这是第一行注释
# 这是第二行注释
# 这是第三行注释
  • 使用 : ' ' : + 空格 + 单引号 或 : <<EOF ... EOF** 的方法**:
: '
这是第一行注释
这是第二行注释
这是第三行注释
'
<<EOF
这是第一行注释
这是第二行注释
这是第三行注释
EOF
Shell 教程和Shell 变量 阅读详情

相关推荐

Shell 编程-Shell 变量详解

今天给伙伴们分享一下Shell 编程-Shell 变量,希望看了有所收获。

mohuanfenghuang的博客 1227

shell脚本-字符串和变量

shell编辑 字符串使用方法 头歌云计算实验

qq_52964803的博客 2313

Shell 变量

在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:数组名=(值1 值2 ... 值n)例如:或者value0value1value2value3还可以单独定义数组的各个分量:可以不使用连续的下标,而且下标的范围没有限制。

office_lgirl的博客 1058

【Shell】字符串变量

目录字符串变量介绍字符串的3种格式字符串的3种格式区别使用单引号 '' 的字符串:(不建议使用,没有办法解析变量)由双引号" "包围的字符串:(推荐)不被引号包围的字符串:获取字符串的长度语法:含义:字符串拼接方式拼接字符串截取语法:案例从左侧第0个开始,向左截取2个字符从左侧第11个开始,向右截取所有字符从右侧第5个开始,向右截取2个字符从左侧查找第一次出的e字符,向右截取所有字符从左边最后一...

al6nlee的博客 939

Keil环境下单片机串口通信实战:如何用printf发送中文(附完整代码)

本文详细解析了在Keil开发环境下,单片机通过串口通信发送中文信息时产生乱码的根本原因及解决方案。核心在于理解并统一编码(如GB2312或UTF-8),并正确重定向printf函数。文章提供了针对STC89C52和STM32F103的完整代码示例,涵盖工程配置、编码设置、调试技巧,帮助开发者实现稳定可靠的中文串口输出。

weixin_29168675的博客 467

优化QT QML中RTSP流播放延迟:海康摄像头实时监控实践

本文详细探讨了在QT QML中优化海康摄像头RTSP流播放延迟的实践方法。通过调整MediaPlayer缓冲策略、硬件加速、解码器优选等五大技巧,显著降低实时监控场景下的延迟问题。文章还提供了海康摄像头RTSP连接实战代码和避坑指南,帮助开发者快速实现高效流媒体播放。

weixin_28363123的博客 556

Shell学习01--创建与变量使用

Shell学习011.创建一个Shell脚本2.Shell变量2.1 使用变量 Shell:是一个C语言编写的程序,是用户使用Linux的桥梁。Shell是一种命令语言,又是一种程序设计语言。 Shell脚本(Shell Script):一种为Shell编写的脚本程序 业界所说的Shell都是Shell脚本,Shell编程就是脚本编程 以下为Linux系统中编写Shell脚本 1.创建一个Shell脚本 使用vi命令来创建文件,扩展名为.sh(.Shell),扩展名并不影响脚本执行 运行Shell脚本的两种

weixin_44826986的博客 1426

疲劳容器的定义_FKM规范针对非焊接构件疲劳强度评估实例介绍(下篇)

一、写在前面FKM Inside ANSYS软件,该软件是在FKM 规范的基础上,在ANSYS Workbench内开发的进行非焊接构件及焊缝静强度和疲劳强度评估的工具包。基于ANSYS计算模型的信息,在图形用户界面定义相关设置,利用有限元分析计算结果,自动嵌入FKM规范要求的静强度计算和疲劳强度计算流程和方法,自动将应力结果和相关物理量传递给工具包,无须手动预先选择评估的热点区域,可以...

weixin_35925298的博客 1885

头歌--shell脚本入门 变量、字符串--第3关:shell 字符串

本关带领大家熟悉 shell 的变量并掌握其使用。

Zjyzzy123456789的博客 3458

ArcMap新手必看:5分钟搞定面要素的四至信息提取(附字段重命名技巧)

本文为ArcMap新手提供了快速提取面要素四至信息的详细教程,包括数据准备、坐标系选择、批量处理技巧及字段重命名优化方案。通过实战步骤和Python脚本示例,帮助用户高效完成GIS数据处理任务,特别适合行政区划数据分析和报告生成。

weixin_29266007的博客 384

搭建PX4开发系统(Ubuntu 22.04)

本文是《从零开始学 PX4 无人机开发》系列第二篇,适合开发者在 Ubuntu 系统下快速搭建 PX4 编译与仿真环境,支持 QGroundControl、Gazebo、MAVSDK 等完整工具链。

qq_15856721的博客 4200

shell脚本学习——编程之变量定义

文章目录SHELL编程模块课程目标一、SHELL介绍1. 编程语言分类2. shell简介3. shell脚本㈠ 什么是shell脚本?㈡ 什么时候用到脚本?㈢ shell脚本能干啥?㈣ 如何学习shell脚本?㈤ 学习shell脚本的秘诀㈥ shell脚本的基本写法㈦ shell脚本的执行方法==二、变量的定义==1. 变量是什么?2. 什么时候需要定义变量?3.变量如何定义?4. 变量的定义规则㈠ 变量名区分大小写㈡ 变量名不能有特殊符号㈢ 变量名不能以数字开头㈣ 等号两边不能有任何空格㈤ 变量名尽量做

fangfeng1021的博客 3581

【技术解析】Point-NeRF:如何通过点云优化加速神经辐射场渲染

本文深入解析了Point-NeRF技术,它通过引入3D点云作为几何先验,有效解决了传统神经辐射场渲染速度慢的痛点。该方法利用神经点云构建局部辐射场,结合点剪枝与生长策略进行动态优化,在保证高渲染质量的同时,实现了高达30倍的训练加速,为高效3D场景重建提供了新范式。

weixin_29159127的博客 268

Shell学习——Shell变量

在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。数组名=(值1 值2 ... 值n)

xd__xy的博客 1427

A Macro- and Micro-Hierarchical Transfer Learning Frameworkfor Cross-Domain Fake News Detection

近年来,社交媒体上假新闻的快速和广泛传播对人们的日常生活构成了越来越大的威胁[6, 14, 19]。为了有效打击假新闻,自动检测假新闻变得至关重要[39]。新闻内容[11, 16, 20, 27]和用户互动(即用户互动)[1, 24, 34]。基于这些类型的数据,提出了单领域假新闻检测,它从新闻文章、用户互动或两者中提取有效特征,以识别单个新闻领域内新闻的真实性(即新闻是真是假)(例如,政治新闻或娱乐新闻)。

qq_52053775的博客 155

提示工程架构师揭秘:prompt优化中的“隐性成本”如何控制?

当我们谈论Prompt优化时,往往聚焦于“效果提升”——比如让模型生成更准确的回答、更符合要求的格式。优化的本质是“成本-收益”的平衡。那些看不见的“隐性成本”,比如反复调试的时间消耗、复杂Prompt带来的认知负荷、长文本导致的系统资源浪费、后续维护的无穷麻烦,往往会在长期运营中成为压垮效率的“稻草”。本文将从提示工程架构师的视角,揭秘Prompt优化中的“隐性成本”到底是什么、如何量化,以及通过哪些工程化手段将这些“看不见的消耗”转化为“可控制的效率”。

操作系统内核探秘的博客 700

Linux中的一些常见变量:SHELL,PATH,PS1,BASHPID

PS1是一个强大的工具,可以帮助用户根据个人喜好自定义终端提示符的外观,从而提升工作效率和使用体验。SHELL变量在 Linux 环境中非常重要,因为它指定了用户的默认命令行解释器,这影响到命令的执行、脚本的运行和用户的工作流程。了解和正确配置SHELL变量可以帮助用户更高效地使用系统。PATH变量在 Linux 系统中至关重要,它决定了系统如何找到并执行命令。通过理解和正确配置PATH变量,用户可以更有效地管理和运行系统中的可执行文件。BASHPID。

眷怀的博客 1667

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

shell脚本学习01_shell变量

shell脚本学习01_shell变量

qq_62435866的博客 917

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

shell学习(变量)

shell变量 shell变量分为四种:自定义变量、环境变量、位置变量、预定义变量 自定义变量:用户本身自己定义的变量 环境变量 例:USER SHELL(解释器) HOME PATH(命令存放路径) echo $PS1 一级提示符 echo $PS2 二级提示符 echo $UID 查看当前用户ID 位置变量 $1,$2,$3… 测试变量效果 echo $1 echo $2 echo $3 echo $$ #程序进程号 echo $# #所有位置变量的数量 echo $*

hahaxixi131的博客 2482

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

开始学习Shell脚本【Shell变量】

定义一个变量a为张三a="张三"等于左右不要有空格!变量名可以用数字、字母和下划线,但不能用数字开头避免shell关键字,例如if、then、else、fi、for、whitle等一般用大写字母标识常量避免特殊符号,例如$bash支持一维数组,不限定数组大小数组名=(值1 值2 值3 …… 值n)也可以单独定义数组的各个分量:……

weixin_67898144的博客 521

Shell脚本学习笔记(黑马程序员shell全套教程)

这篇Shell教程介绍Shell作为连接用户与Linux内核的桥梁,通过80讲系统课程从零基础到实战。内容涵盖Shell基础知识、运行原理、解析器类型等,讲解了Shell脚本作为编程语言的特点(含变量、函数、逻辑控制等),以及如何通过Shell命令提升Linux系统管理效率。教程附带MobaXterm终端工具使用说明,适合Windows用户进行SSH连接和Shell学习。

weixin_67732682的博客 1214

Shell系统学习之Shell变量和引用

Shell语言中的变量和引用的相关知识

MashiMaroJ的专栏 3118

shell脚本【一、 特殊变量/子串/特殊扩展变量/父子shell/内置命令、外置命令】

利用括号,开启子shell的理念,以及检查,在shell脚本开发中经常会用子shell进行多进程的处理,提高程序并发执行效率。shell编程,尽量使用linux内置的命令,内置的操作,和内置的函数,效率最高C语言开发,效率最高,内置命令:在系统启动时就加载入内存,常驻内存,执行效率更高,但是占用资源,cd。也称之为,自己单独下载的文件系统命令,处于bash shell之外的程序。一个小括号,开启一个子shell运行命令,还可以嵌套多个。不创建子进程,执行后续命令,且执行完毕后,自动exit。

qq_44799103的博客 1123

shell变量

在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。数组名=(值1 值2 ... 值n)或者value0value1value2value3可以不使用连续的下标,而且下标的范围没有限制。

运维老生常谈 1125

【Shell编程】1.Shell脚本、echo、Shell变量

【Shell编程】1.Shell脚本、echo、Shell变量。

因心,三人水的博客 933

Shell脚本编程语言基础学习教程

摘要 本文介绍了Shell脚本的基础知识,包括基本语法和常用操作。主要内容涵盖:1) 首个"Hello World"脚本示例及运行方法;2) 变量定义与使用规则,包括字符串、数组和特殊变量的处理;3) 流程控制语句如if-else判断和for/while循环的使用。文章通过代码示例详细说明每种语法结构的具体应用,并指出了Shell脚本特有的语法规则(如变量定义不能有空格)和注意事项(如单/双引号区别)。这些基础内容为编写自动化脚本提供了必要知识框架,适用于Linux系统管理和日常任务自动

乐夜之下的博客 1633
上一篇: 语雀邀请码(白嫖30天会员)
下一篇: Shell学习(2/6) 传递参数-数组
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值