当前位置: 首页 > news >正文

【Shell】Shell基础学习

一、shell脚本

(1)第一个shell脚本

#!/bin/bash   
#this is a comment
echo "hello world"

一个shell脚本永远以“#!”开头,这是一个脚本开始的标记,它是告诉系统执行这个文件需要用某个解释器,后面的/bin/bash就是指明解释器的具体位置。

“#”开头是注释

(2)脚本运行方式

①直接bash一个文件指明使用bash shell来解释脚本。

 bash test.sh

②给脚本加执行权限,‘’./ “执行脚本

 chmod +x test.sh./test.sh

如果希望将一个脚本设置成默认系统命令,只需将该脚本复制到系统$PATH变量所在的目录中,同时赋予可执行权限。下次运行直接输入命令即可。

(3)shell内建命令

① 如何确定内建命令:type
type cdtype ifconfig
② 执行程序:. 和source
. ./test.shsource test.sh
③创建命令别名:alias
④ 切换目录:cd
⑤ 声明变量:declare/typeset
#!/bin/bash
#shell是弱类型编程语言,声明变量时并不需要指明类型
declare str="hello world"
echo $str
declare a=1
echo $a
declare pi=3.14
echo $pifun1()
{echo "fun1"
}
fun2()
{echo "fun2"
}#使用-r 声明变量为只读,不允许修改
#使用-a 声明变量
#使用-F 显示脚本定义的函数
#使用-f 显示脚本定义的函数体echo "declare -F"
declare -Fecho "declare -f"
declare -f
⑥ 打印字符:echo

该命令默认最后加上换行符,使用 -n 参数可以不打印换行符

默认情况,禁止解释打印反斜杠转义的字符,若需要打印转义字符,需要使用 -e 参数

⑦ 循环控制:break(跳出循环)/continue (跳过当次循环,进入下一次循环)
⑧ 退出shell:exit
⑨ 整数运算:let
#支持+ - * /(计算结果为整数) % **(次方) 
let a=2+2      #a=4
let b=2**3     #b=8
#支持自增/自减
let i++
let j--
#支持+= -= *= /= %=
let c+=10

二、shell编程基础

1、变量

(1)变量名

shell变量必须以字母或下划线开头,后面可以跟数字、字母、下划线,变量长度没有限制。

变量区分大小写。

(2)变量赋值与取值
① 赋值

【定义变量】 变量名=变量值

【注意点1】变量名和变量值之间用等号相连,之间没有任何空格,等号任何一边出现空格就会出错。

【注意点2】当变量中有空格时必须用引号(可以是双引号或单引号)括起来,否则会出错。
在这里插入图片描述

② 取值

在变量前加 $ ,或使用${}.

【注意点3】如果变量值引用了其他变量,必须使用双引号。因为单引号会阻止shell解释特殊字符$
在这里插入图片描述

(3)取消变量unset

取消变量指将变量从内存中释放,使用命令unset,后面跟变量名。函数也可以被取消,unset后面跟函数名。
在这里插入图片描述

(4)数组

数组的每一项称为一个元素,对于每个元素可以使用索引方式取值。数组并不要求数组的每个元素都是相同类型。随时可以根据需要向数组中增加元素。

declare -a arr   #定义一个数组
arr[0]=1
arr[1]=2
arr[2]='hello world' #特殊shell中允许如此#可以在创建时赋值
declare -a name=('jack' 'bob')#可以给特定的元素赋值
declare -a numbers=([2]=2 [4]=4)#只给2,4索引元素赋值#数组取值${数组名[索引]}
echo ${name[1]}#取数组所有元素
echo ${name[*]}
echo ${name[@]}
#从表面上两者没有区别,但${name[*]}得到的是一个字符串,${name[@]}是以空格隔开的元素值#获取数组元素个数(数组长度)
echo ${#name[*]}
echo ${#name[@]}
#字符串数组也可以获取某个元素的长度
echo ${#name[1]}#数组截取:可以是截取数组的一部分,也可以是截取数组元素的一部分echo ${name[@]:0:2}#截取数组name,0表示从索引0开始,数字2表示取两个元素echo ${name[1]:0:2}#截取元素name[1]#数组连接:将若干数组拼接
conn=(${name[@]} ${name2[@]})#元素替换:将数组元素值替换成其他值
conn=(${conn[@]/jack/hellojack})#取消元素/数组:使用unset将元素释放
unset conn[0]#取消数组索引0元素
unset conn #取消数组conn
(5)只读变量(常量)

这种变量在声明时就要求赋值,并之后无法修改。可以使用readonly内建命令创建,和declare -r 效果声明变量效果一致。

(6)变量的作用域

shell变量的作用域是在本shell内,属于本shell的全局变量,也就是从定义该变量开始到shell结束,或到主动使用unset删除该变量的地方为止。在变量的作用域内,该变量都是可见的,在函数内对变量也是可以访问、修改的

#!/bin/bashdeclare

相关文章:

【Shell】Shell基础学习

一、shell脚本 (1)第一个shell脚本 #!/bin/bash #this is a comment echo "hello world"一个shell脚本永远以“#!”开头,这是一个脚本开始的标记,它是告诉系统执行这个文件需要用某个解释器,后面的/bin/bash就是指明解释器的具体位置。 “#”开头是注释 …...

python文件读取

相对路径 读文件 打印txt文件 fopen(".\data.txt","r",encoding"utf-8") contentf.read() print(content) f.close()with open(".\data.txt","r",encoding"utf-8") as f:contentf.read()print(content)contentf…...

第16关 革新云计算:如何利用弹性容器与托管K8S实现极速服务POD扩缩容

------> 课程视频同步分享在今日头条和B站 天下武功,唯快不破! 大家好,我是博哥爱运维。这节课给大家讲下云平台的弹性容器实例怎么结合其托管K8S,使用混合服务架构,带来极致扩缩容快感。 下面是全球主流云平台弹…...

算法通关村第十二关|黄金挑战|最长公共前缀字符串压缩

1.最长公共前缀 原题:力扣14. 1.从前到后比较每个字符串的同一个位置。 public String longestCommonPrefix(String[] strs) {if (strs null || strs.length 0) {return "";}int length strs[0].length();int count strs.length;for (int i 0; i …...

池式组件 ----- Mysql连接池的原理实现

前言 本文是mysql连接池的实现。学完mysql连接池之后,接下来会结合多线程来进行测试,看看使用连接池性能高,还是不要连接池性能高,具体能差多少。当然这是下一篇文章了哈哈哈哈哈。当前首要任务是学会连接池,会都不会…...

1.自动化运维工具Ansible的安装

1.物料准备 四台服务器,其中一个是主控机,三个为host 2.安装 在主控机上安装ansible 2.1 设置EPEL仓库 Ansible仓库默认不在yum仓库中,因此我们需要使用下面的命令启用epel仓库。 yum install epel-release -y2.2 执行安装命令 yum i…...

[个人笔记] Apache2.4配置TLS1.3安装openssl1.1.1

Linux - 运维篇 第二章 Apache2.4配置TLS1.3&安装openssl1.1.1 Linux - 运维篇系列文章回顾Apache2.4配置TLS1.3&安装openssl1.1.1参考来源 系列文章回顾 第一章 php-fpm编译和使用openssl扩展 Apache2.4配置TLS1.3&安装openssl1.1.1 [rootlocalhost ~]# yum ins…...

解密Kafka主题的分区策略:提升实时数据处理的关键

目录 一、Kafka主题的分区策略概述1.1 什么是Kafka主题的分区策略?1.2 为什么分区策略重要? 二、Kafka默认分区策略2.1 Round-Robin分区策略 三、自定义分区策略3.1 编写自定义分区器3.2 最佳实践:如何选择分区策略 四、分区策略的性能考量4.…...

GPT5大剧第二季开启,Sam Altman 重掌 OpenAI CEO 大权

OpenAl 最新公告: Sam Altman 重掌 OpenAI CEO 大权,公司迎来新的初始董事会 Mira Murati 出任 CTO,Greg Brockman 再次成为总裁。来看看CEO Sam Altman和董事会主席 Bret Taylor的最新发言。 2023年11月29日 以下是 CEO Sam Altman和董事会主席 Bret Taylor 今天下…...

Selenium 连接到现有的 Google Chrome 示例

python 3.7 selenium 3.14.1 urllib3 1.26.8 Google Chrome 119.0.6045.160 (64位) chromedriver.exe 119.0.6045.105(win32) 1 Google Chrome 添加参数 "--remote-debugging-port9222" 2 测试效果(chromedriver.exe 要和 Google Chrome 版本…...

EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测

EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测 目录 EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现TCN-BiLSTM-Multihead-…...

基于安卓的2048益智游戏的设计与实现

基于安卓的2048益智类游戏的设计与实现 摘要:现如今随着社会日新月异,人们越来越离不开智能手机所提供的灵活性与便携性。安卓系统是在这股手机发展迅猛的潮流中其市场占有率过半的手机平台,基于安卓系统的游戏开发有着不可估量的前景。 本论…...

解决Linux Visual Studio Code显示字体有问题/Liunx下Visual Studio Code更换字体

01、具体问题 在Linux下VsCode控制台与代码区显示异常,如下图所示: 代码显示 终端显示 02、解决方案 下载字体 [rootlocalhost mhzzj]$ cd /usr/share/fonts # 进入目录 [rootlocalhost fonts]$ sudo yum install git # 下载字体 [rootlocalhost fo…...

CityEngine2023 根据shp数据构建三维模型并导入UE5

目录 0 引言1 基本操作2 实践2.1 导入数据(.shp)2.2 构建三维模型2.3 将模型导入UE5 🙋‍♂️ 作者:海码007📜 专栏:CityEngine专栏💥 标题:CityEngine2023 根据shp数据构建三维模型…...

修复电脑中缺失的VCRUNTIME140.dll文件的5个有效方法

vcruntime140.dll丢失5个修复方法与vcruntime140.dll是什么以及丢失对电脑的影响 引言: 在日常使用电脑的过程中,我们可能会遇到一些错误提示,其中之一就是“vcruntime140.dll丢失”。那么,什么是vcruntime140.dll?它…...

什么是PDN的交流阻抗?

什么是PDN的交流阻抗? 在电力电子领域,PDN(Power Distribution Network)的交流阻抗是一个重要的概念,它反映了PDN在交流电源和负载之间传输电能的能力。了解PDN的交流阻抗对于优化电源设计、提高系统性能和可靠性具有重…...

FFmpeg之将视频转为16:9(横屏)或9:16(竖屏)(一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...

Web安全漏洞分析-XSS(上)

随着互联网的迅猛发展,Web应用的普及程度也愈发广泛。然而,随之而来的是各种安全威胁的不断涌现,其中最为常见而危险的之一就是跨站脚本攻击(Cross-Site Scripting,简称XSS)。XSS攻击一直以来都是Web安全领…...

MVCC多版本并发控制相关面试题整理

多版本并发控制是一种用于支持并发事务的数据库管理系统技术,它允许多个事务同时访问数据库,而不会相互干扰或导致数据不一致。MVCC通过在数据库中维护不同版本的数据来实现这一目标,从而允许每个事务看到一致的数据库快照。 并发导致的问题…...

02-鸿蒙学习之4.0todoList练习

02-鸿蒙学习之4.0todoList练习 代码 /*** 1:组件必须使用Component装饰* 2.Entry 装饰哪个组件,哪个组件就呈现在页面上* 3.被Entry 装饰的入口组件。build()必须有且仅有一个根 ** 容器 ** 组件* 其他的自定义组件,build() 中…...

鸿蒙今日穿搭页面构建:单品清单、一周搭配日历与穿搭提示模块详解

鸿蒙今日穿搭页面构建:单品清单、一周搭配日历与穿搭提示模块详解 前言 在 HarmonyOS 6.0 应用开发中,穿搭类页面的单品管理、周计划安排和温馨提醒是完善用户体验的重要补充模块。本文将以“今日穿搭”应用中的“单品清单”网格模块、“一周搭配日历”周…...

【咨询业AI Agent应用成熟度评估模型】:基于217家机构实测数据的4级能力图谱与升级路线图

更多请点击: https://codechina.net 第一章:【咨询业AI Agent应用成熟度评估模型】:基于217家机构实测数据的4级能力图谱与升级路线图 本模型基于对全球217家管理咨询、战略咨询与数字化转型服务商的实地调研与系统性能力测评,覆…...

从ISA到PCIe:为什么老电脑升级显卡要插对槽?聊聊PCI总线的那些事儿

从ISA到PCIe:老电脑升级显卡必须知道的插槽进化史 当你从储物间翻出一台2003年的戴尔Dimension 4600准备升级显卡时,会发现主板上那些长短不一的插槽仿佛在讲述一段被遗忘的技术史诗。黑色PCI插槽旁紧挨着棕色的AGP 8X,而最边缘那个几乎被灰尘…...

LVGL滑块实战:5分钟为你的ESP32智能家居面板添加一个温湿度调节控件

LVGL滑块实战:5分钟为你的ESP32智能家居面板添加温湿度调节控件 想象一下,当你走进家门,手指轻轻滑动智能面板上的圆形旋钮,室温立刻调整到最舒适的状态——这种丝滑的交互体验背后,正是LVGL滑块控件的魔力。作为嵌入式…...

Ryujinx模拟器完整指南:在PC上免费畅玩Switch游戏的终极解决方案

Ryujinx模拟器完整指南:在PC上免费畅玩Switch游戏的终极解决方案 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否曾经梦想在电脑上体验《塞尔达传说:王国…...

AI答案优化效果可以靠哪些第三方数据验证?

先给结论:AI答案优化效果要做三层交叉验证AI 答案优化、GEO 服务的效果,不应只听服务商自述,也不适合只靠单张 AI 回答截图判断。更稳妥的做法,是用三层数据交叉验证:AI回答层数据:看品牌是否被提及、位置是…...

初创团队如何利用Taotoken统一管理多项目的AI模型调用

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何利用Taotoken统一管理多项目的AI模型调用 对于初创团队而言,同时推进多个小项目是常态。每个项目可能都需…...

初次使用Taotoken控制台管理账单与查看各模型消耗明细

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初次使用Taotoken控制台管理账单与查看各模型消耗明细 对于刚开始使用大模型服务的开发者或团队而言,清晰、透明地掌握…...

JMeter直播间压测实战:长连接、多协议与状态管理

1. 直播间压测不是“点几下鼠标”的事,而是对整个实时链路的生死拷问 别天天看看直播了——这句话背后藏着太多人没意识到的残酷现实:你刷的每一场高人气直播间,背后都是一场毫秒级的并发风暴。弹幕像洪水一样涌进来,礼物特效在千…...

初创公司如何利用Taotoken快速构建多模型AI应用原型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创公司如何利用Taotoken快速构建多模型AI应用原型 对于资源有限的初创团队而言,验证一个AI产品想法的关键在于速度与…...