当前位置: 首页 > 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() 中…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦&#xff0…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...

高分辨率图像合成归一化流扩展

大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...

Canal环境搭建并实现和ES数据同步

作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...