【玩转Linux操作】详细讲解shell的注释,变量,字符串,数组等操作

news2024/12/23 14:36:52

🎊专栏【玩转Linux操作】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【Counting Stars 】
欢迎并且感谢大家指出小吉的问题🥰

文章目录

  • 🍔概述
    • ⭐注意
    • ⭐示例
      • 🏳️‍🌈然后运行
        • 🏀当前路径下执行
        • 🏀绝对路径下执行
        • 🏀家目录下执行
        • 🏀使用解释器执行
  • 🍔shell注释
    • ⭐单行注释
    • ⭐多行注释
  • 🍔shell变量
    • ⭐定义变量
    • ⭐使用变量
    • ⭐只读变量
    • ⭐删除变量
    • ⭐自定义变量(局部变量)
    • ⭐环境变量(全局变量)
      • 🎈把自定义变量改为环境变量
      • 🎈把环境变量改为自定义变量
  • 🍔默认变量
  • 🍔字符串
    • 🎁单引号和双引号的区别
    • ⭐其他参数相关变量
    • ⭐获取字符串长度
    • ⭐提取字串
  • 🍔数组
    • ⭐定义
    • ⭐读取数组中某个元素的值
      • 🎈格式
    • ⭐读取整个数组
      • 🎈格式
    • ⭐读取数组的长度
      • 🎈格式

在这里插入图片描述

🍔概述

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。

Linux中常见的shell脚本有很多种,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • zsh

Linux系统中一般默认使用bash,所以接下来讲解bash中的语法。

⭐注意

文件开头需要写#! /bin/bash,指明bash为脚本解释器。

⭐示例

新建一个test.sh文件

在这里插入图片描述
进入test.sh后,输入

#! /bin/bash
echo "hello"

在这里插入图片描述
🏳️‍🌈使用ll命令查看权限,发现test.sh文件没有可写的权限
咱们来给它赋予权限

chmod +x test.sh

🏳️‍🌈然后运行

🏀当前路径下执行

./test.sh

🏀绝对路径下执行

/home/acs/test.sh

🏀家目录下执行

~/test.sh

🏀使用解释器执行

bash test.sh

在这里插入图片描述

🍔shell注释

⭐单行注释

每行中#后面的内容都是注释

# 这是一行注释

echo 'Hello World'  #  这也是注释

⭐多行注释

示例

:<<EOF
第一行注释
第二行注释
第三行注释
EOF

其中EOF可以换成其它任意字符串。例如:

:<<abc
第一行注释
第二行注释
第三行注释
abc

:<<!
第一行注释
第二行注释
第三行注释
!

🍔shell变量

⭐定义变量

定义变量,不需要添加$符号

定义变量时,等号两边不能有空格

name1='fufu'  # 单引号定义字符串
name2="fufu"  # 双引号定义字符串
name3=fufu    # 也可以不加引号,同样表示字符串

⭐使用变量

使用变量,需要加上$符号,或者${ }符号。花括号是可选的,主要为了帮助解释器识别变量边界。

name=fufu
echo $name  # 输出fufu
echo ${name}  # 输出fufu
echo ${name}rice  # 输出fufurice

在这里插入图片描述

⭐只读变量

使用readonly或者declare可以将变量变为只读

name=fufu
readonly name
declare -r name  # 两种写法均可

name=abc  # 会报错,因为此时name只读

⭐删除变量

使用unset可以删除变量

name=fufu
unset name
echo $name  # 输出空行

在这里插入图片描述

被声明为只读的变量无法被unset删除

⭐自定义变量(局部变量)

子进程不能访问的变量

⭐环境变量(全局变量)

子进程可以访问的变量

🎈把自定义变量改为环境变量

name=fufu #定义变量
export name #第一种方法
declare -x name #第二种方法

🎈把环境变量改为自定义变量

export name=fufu #定义环境变量
declare +x name #改为自定义变量

🍔默认变量

在执行 shell 脚本时,可以向脚本传递参数。
$1 是第一个参数,$2 是第二个参数,以此类推。特殊的,$0 是文件名(包含路径)。例如:
$0是文件名(包含路径),其实就是我们输入的第一段,输入绝对路径就显示绝对路径,输入相对路径就显示相对路径

🍔字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。

🎁单引号和双引号的区别

1.单引号中的内容会原样输出,不会执行,不会取变量
2.双引号中的内容可以执行,可以取变量

在这里插入图片描述

⭐其他参数相关变量

在这里插入图片描述

name=fufu #不用引号
echo 'hello, $name \"hh\"'  # 单引号字符串,输出 hello, $name \"hh\"
echo "hello, $name \"hh\""  # 双引号字符串,输出 hello, fufu "hh"

在这里插入图片描述

⭐获取字符串长度

name="fufu"
echo ${#name} #输出4

获取长度时,一定要带上#

在这里插入图片描述

⭐提取字串

name="fufu"
echo ${name:0:2} # 提取从0开始的2个字符 (与python的切片不同)

在这里插入图片描述

🍔数组

数组下标从0开始

⭐定义

数组用小括号表示,元素之间用空格隔开

array=(1 abc "def" fufu)

也可以直接定义数组中某个元素的值

array[0]=1
array[1]=abc
array[2]="def"
array[3]=fufu

⭐读取数组中某个元素的值

🎈格式

${array[index]}

在这里插入图片描述

在这里插入图片描述

⭐读取整个数组

🎈格式

${array[@]}  # 第一种写法
${array[*]}  # 第二种写法

在这里插入图片描述

⭐读取数组的长度

🎈格式

${#array[@]}  # 第一种写法
${#array[*]}  # 第二种写法

这个和上面一种的区别就是array前面有没有#

在这里插入图片描述

🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰

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

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

相关文章

scala的基本语法

注释 对于scala的注释&#xff0c;简而言之就是一句话&#xff0c;和java的注释一模一样 基本语法 &#xff08;1&#xff09;单行注释&#xff1a;// &#xff08;2&#xff09;多行注释&#xff1a;/* */ &#xff08;3&#xff09;文档注释&#xff1a;/****/代码示例&…

samaphore、countdownlatch、cyclinarrier

目录 一、samaphore 1、介绍 2、应用 3、原理 二、countdownlatch 三、cyclicbarrier 一、samaphore 1、介绍 信号量&#xff0c;用来限制同时访问共享资源的线程上限。可以理解为停车场入口的提示排&#xff0c;标识有多少车位&#xff0c;有车位才能进去停车&#xf…

ElasticSearch-使用IK分词器进行分词

使用KIbana测试IK分词器 打开开发工具台 ik_smart 最少分词器 分词结果比较少 GET _analyze{"analyzer": "ik_smart","text": "中国共产党"}ik_max_word 颗粒度最细分词器 分词结果比较多,组成各种结果,穷尽词库的可能&#xff01…

easypan前端学习

文章目录 前端项目node 版本node镜像构建项目创建项目安装项目所有依赖 图片资源网站encodeURI & decodeURIapp.config.globalProperties与getCurrentInstanceObject.assignvue-cookies安装vue-cookies 使用vue-cookiesrouter.currentRoutepreserve logimport.meta.envRequ…

QPaint绘制图形

流程 继承QWidget类&#xff0c;重写paintEvent方法&#xff0c;在其中使用QPainter进行绘图。 举例 创建项目&#xff0c;项目结构如下&#xff1a; // widget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget…

TypeScript ~ TS 掌握编译文件配置项 ⑥

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

git 上传下载

文章目录 gitee/GitHub 是用来做什么的&#xff1f;什么时候需要学习上传项目到 gitee&#xff1f;为什么要将本地项目上传到 gitee&#xff1f;创建 gitee 仓库&#xff1a;在本地新建一个项目将仓库拉取到本地使用 idea 实现项目的上传下载gitee 仓库查看 下面我就来为大家介…

第六章 习题(6789B)【计算机系统结构】

第六章 习题【计算机系统结构】 前言推荐第六章 习题678911 最后 前言 2023-6-24 10:43:46 以下内容源自《【计算机系统结构】》 仅供学习交流使用 推荐 第五章 作业&#xff08;149A&#xff09;【计算机系统结构】 答案参考&#xff1a; https://www.docin.com/p-28456…

LVDS (Low Voltage Differential Signaling)基础知识

LVDS(Low Voltage Differential Signaling&#xff09;: 是一种小振幅差分信号技术&#xff0c;它使用非常低的幅度信号 (250mV~450mv&#xff09;通过一对平行的 PCB 走线或平衡电缆传输数据。 在两条平行的差分信号线上流经的电流及电压振幅相反&#xff0c;噪声信号同时耦…

小鱼C python - 集合的练习

题一&#xff1a;用字典实现集合的去重特性 1. 生成100个1&#xff5e;100的随机值 思路&#xff1a; 1. range 范围 2. random.randint(a,b) import random x [] for I in range(100):x.append(random.randint(1,100)) print(x) 2. x和y的交集 思路&#xff1a;1.遍历x,…

通过 pGina 对 Windows 设备进行管理

文章目录 前言1、环境信息1.1、服务器端1.2、客户端 2、pGina 安装及配置2.1、下载并安装2.2、配置2.3、模拟测试2.4、Windows 远程登录测试 总结 前言 对 Windows 设备进行管理&#xff0c;一般是通过 AD 进行的&#xff0c;但是这玩意儿是收费的&#xff0c;而且还挺贵。有没…

SpringSecurity(二):自定义认证(源码+落地实现)。

自定义认证 自定义资源权限规则资源分类自定义资源权限规则为什么我们要自定义呢&#xff1f;如何去覆盖呢&#xff1f;WebSecurityConfigurerAdapter它是干什么用的实例 自定义登录界面步骤源码解析 自定义登录成功处理&#xff08;前后端分离的情况&#xff09;项目环境succe…

Axure中使用echarts图标

第一步&#xff1a;axure中防一个矩形框 第二步&#xff1a;将矩形框命名为Demo 这步很重要&#xff0c;后续会引用这个名字 第三步&#xff1a;打开Echarts示例&#xff0c;选择需要的样式&#xff0c;并调整数值 Examples - Apache ECharts 第四步&#xff1a;代码准备 需…

Windows10host文件修改方法

1、首先打开“此电脑”&#xff0c;定位到&#xff1a; C:\Windows\System32\drivers\etc 2、使用鼠标右键单击“hosts”&#xff0c;弹出来的菜单中选择“属性” 3、弹出“文件属性”窗口后单击“上方的”安全“栏”。 选中“ALL APPLICATON PACKAGES”后单击“编辑” 4、同…

Jmeter核心结构和运行原理(1)

Jmeter核心结构和运行原理 一、Jmeter核心结构和运行原理1、JMeter核心结构2、JMeter的体系结构3、JMeter运行原理a、GUI模式&#xff1a;b、非GUI模式&#xff1a;c、单机模式&#xff1a;d、分布式模式 一、Jmeter核心结构和运行原理 1、JMeter核心结构 测试计划 线程组 配…

MongoDB基本使用(一)

MongoDB基本使用 Nosql简介 NoSQL(NoSQL Not Only SQL )&#xff0c;意即”不仅仅是SQL”。 在现代的计算系统上每天网络上都会产生庞大的数据量&#xff0c; 这些数据有很大一部分是由关系数据库管理系统&#xff08;RDBMS&#xff09;来处理。 1970年 E.F.Codd’s提出的关系…

总结910

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化5讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日规划 今日已做 1.早上回顾之前背诵的文章 2.写自我总结&#…

Java 中常见的数据结构

数据结构简介 数据结构是计算机科学中用于组织和存储数据的一种方式或方法。它定义了不同数据元素之间的关系&#xff0c;以及对这些数据元素进行操作和访问的规则和技术。 数据结构可以用来描述问题的抽象模型&#xff0c;并提供处理该问题的操作和算法。它可以通过逻辑和物…

wpf增加系统托盘图标

使用系统托盘&#xff0c;可以为用户提供一个简便快捷的操作习惯。 wpf中增加系统托盘图标有2种 第一种&#xff0c;使用Hardcodet.NotifyIcon.Wpf开源组件 1.建立一个wpf程序 2.安装Hardcodet.NotifyIcon.Wpf 3.增加图片 图片选择资源&#xff0c;否则获取不到路径 4.界面…

TypeScript - 函数(上)

目录 1、介绍 2、函数类型表达式 3、呼叫签名 4、构造签名 5、泛型函数 6、推论 7、约束 8、使用约束值 9、指定类型参数 1、介绍 函数是JavaScript应用程序的基础。 它帮助你实现抽象层&#xff0c;模拟类&#xff0c;信息隐藏和模块。 在TypeScript里&#xff0c…