Shell 编程:探索 Shell 的基本概念与用法
目录
Shell 简介
Shell 脚本
Shell 脚本运行
Shell 变量
1、创建变量和赋值
2、引用变量
3、修改变量的值
4、只读变量
5、删除变量
6、环境变量
Shell 字符串操作
1、拼接字符串
2、字符串长度
3、字符串截取
Shell 数组
1、创建数组
2、访问数组元素
shell 传递参数
1、位置参数
2、特殊变量
Shell echo命令
1、打印文本消息
2、显示变量值
3、打印多行文本
4、输出特殊字符
5、输出到文件
6、追加到文件
Shell 简介
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序,shell 和 shell script 是两个不同的概念。
Shell 脚本
打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。
#!/bin/bash
echo "Hello World !"
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
Shell 脚本运行
1、作为可执行程序
chmod +x ./test.sh #使脚本具有执行权限./test.sh #执行脚本
2、作为解释器参数
/bin/sh test.sh/bin/php test.php
Shell 变量
变量是一种存储和操作数据的基本方式。在Shell脚本中,你可以创建、赋值、修改和引用变量。
只能使用英文字母、不能以数字开头、中间不能有空格、可以使用下划线、不能使用标点符号、避免使用Shell关键字。
1、创建变量和赋值
name="John"
age=25
2、引用变量
要引用变量的值,可以使用$符号。
echo $name
echo "My name is $name"
3、修改变量的值
可以使用赋值语句来修改变量的值。
age=30
4、只读变量
你可以使用 readonly 命令将变量设置为只读,这意味着你不能修改它的值。
readonly age
5、删除变量
使用 unset 命令可以删除一个变量。
unset age
6、环境变量
当谈到环境变量时,你可以将其想象成是一种全局变量,对于整个操作系统或进程而言都是可见的。环境变量存储了一些配置信息、路径和其他重要的数据,它们可以被不同的程序和脚本访问和使用。
环境变量是在整个Shell会话中都可用的特殊变量。你可以使用 export 命令将一个变量升级为环境变量。
export MY_VARIABLE="Hello"
Shell 字符串操作
1、拼接字符串
使用连接操作符 . 可以将两个字符串拼接在一起。
greeting="Hello"
name="Alice"
message=$greeting" "$name
echo $message
或者使用变量引用的方式。
message="${greeting} ${name}"
2、字符串长度
使用 ${#string} 可以获取字符串的长度。
text="Hello, World!"
length=${#text}
echo "字符串长度为:$length"
3、字符串截取
使用 ${text:7:5} 将会从第7个字符开始(从0开始计数),截取5个字符,得到的子字符串是 "World"。
text="Hello, World!"
substring=${text:7:5}
echo "截取的子字符串:$substring"
Shell 数组
1、创建数组
可以使用括号来创建数组,并在括号内用空格分隔数组元素。
fruits=("apple" "banana" "cherry")
2、访问数组元素
通过索引来访问数组元素,索引从0开始计数。
echo ${fruits[0]} # 输出:apple
echo ${fruits[1]} # 输出:banana
echo ${fruits[2]} # 输出:cherry
shell 传递参数
1、位置参数
# 脚本名:myscript.sh
echo "第一个参数是: $1"
echo "第二个参数是: $2"
执行
./myscript.sh arg1 arg2
输出
第一个参数是: arg1
第二个参数是: arg2
2、特殊变量
除了位置参数,还有一些特殊变量用于获取有关脚本自身和其环境的信息,$0:脚本名称、$#:传递给脚本的参数个数、$@:所有参数的列表、$*:所有参数的列表,作为单个字符串、$?:上一个命令的退出状态。
# 脚本名:special.sh
echo "脚本名:$0"
echo "参数个数:$#"
echo "参数列表:$@"
echo "参数列表(作为单个字符串):$*"
echo "上一个命令的退出状态:$?"
执行
./special.sh arg1 arg2 arg3
输出
脚本名:./special.sh
参数个数:3
参数列表:arg1 arg2 arg3
参数列表(作为单个字符串):arg1 arg2 arg3
上一个命令的退出状态:0
Shell echo命令
1、打印文本消息
echo "Hello, World!"
2、显示变量值
name="Alice"
echo "My name is $name"
3、打印多行文本
echo "Line 1"
echo "Line 2"
4、输出特殊字符
\t:代表制表符(Tab键)、\n:代表换行符;
echo "New\t line\n"
5、输出到文件
这将把 "Hello, File!" 输出到名为 output.txt 的文件中,如果文件存在则覆盖内容。
echo "Hello, File!" > output.txt
6、追加到文件
这将把 "More content" 追加到 output.txt 文件末尾。
echo "More content" >> output.txt
相关文章:
Shell 编程:探索 Shell 的基本概念与用法
目录 Shell 简介 Shell 脚本 Shell 脚本运行 Shell 变量 1、创建变量和赋值 2、引用变量 3、修改变量的值 4、只读变量 5、删除变量 6、环境变量 Shell 字符串操作 1、拼接字符串 2、字符串长度 3、字符串截取 Shell 数组 1、创建数组 2、访问数组元素 shell …...
【Git分支操作---讲解二】
Git分支操作---讲解二 查看分支创建分支切换分支修改分支切换分支合并分支合并分支【冲突】(只会修改主分支不会修改其他分支)什么时候会有冲突? 查看分支 创建分支 切换分支 修改分支 切换分支 合并分支 合并分支【冲突】(只会修改主分支不会修改其他分支) 什么时…...
vue2+qrcodejs2+clipboard——实现二维码展示+下载+复制到剪切板——基础积累
最近在写后台管理系统时,遇到一个需求就是要实现二维码的展示下载复制到剪切板。 效果图如下: 1.二维码展示下载功能——qrcodejs20.0.2 我是安装的qrcodejs20.0.2,指定了具体的版本号,也可以安装默认的当前稳定版本࿰…...
【PHP】echo 输出数组报Array to string conversion解决办法
代码: <?PHP echo "Hello World!";$demoName array("kexuexiong","xiong");echo "<pre>";var_dump($demoName);echo $demoName; print_r($demoName);echo "</pre>"; ?>输出结果࿱…...
Arduino驱动MiCS-4514气体传感器(气体传感器篇)
目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序...
marked在vue项目中改变超链接跳转方式和图片放大预览
marked在vue项目中改变超链接跳转方式和图片放大预览 这里我是另起一个js文件对marked的配置做了修改,参考如下 import marked from marked let renderer new marked.Renderer() const linkRenderer renderer.link const imgRenderer renderer.image // 超链接…...
leetcode485. 最大连续 1 的个数
思路:【双指针】 left左边界,right往右跑遇到0,则计算该长度。并更新cnt(最大连续1个数)。 class Solution { public:int findMaxConsecutiveOnes(vector<int>& nums) {int left 0, right 0;int cnt 0;…...
linux 源代码编译
源代码编译 有时候会在linux上下载源码包,然后进行编译成可执行的文件,这个过程需要经过configure、make、make install、make clean四个步骤 configure 为这个程序在当前的操作系统环境下选择合适的编译器和环境参数来编译该代码 make 对程序代码进行编…...
C语言日常刷题 1
文章目录 题目答案与解析1234.5.6. 题目 1、执行下面程序,正确的输出是( ) int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf(“%d,%d\n”,x, y); return 0; } A: 5,7 B: 7,5 C: 3,8 D: 8…...
es和数据库同步方案
5.5 课程信息索引同步 5.5.1 技术方案 通过向索引中添加课程信息最终实现了课程的搜索,我们发现课程信息是先保存在关系数据库中,而后再写入索引,这个过程是将关系数据中的数据同步到elasticsearch索引中的过程,可以简单成为索引…...
手机NFC功能是什么?
手机NFC功能是什么? 随着智能手机的不断发展和普及,NFC(近场通讯)功能已经成为了我们生活中不可或缺的一部分。NFC是一种无线通信技术,可以让手机和其他设备之间进行快速的数据交换和支付操作。那么,手机NFC功能是什么࿱…...
零拷贝技术详解
当涉及到网络编程和IO操作时,数据拷贝是一个常见的性能瓶颈。传统的数据拷贝过程中,数据需要从内核缓冲区复制到用户空间缓冲区,然后再从用户空间缓冲区复制到内核缓冲区,这个过程会耗费大量的CPU时间和内存带宽,降低系…...
【VS Code插件开发】消息通信(四)
🐱 个人主页:不叫猫先生,公众号:前端舵手 🙋♂️ 作者简介:前端领域优质作者、阿里云专家博主,共同学习共同进步,一起加油呀! 📢 资料领取:前端…...
开源硬件:下一个技术革命?
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
开发一个npm组件包
vue项目初始化 vue create mytest 启动项目以后 组件开发 开发的组件写在 package中 如下如例 开发一个 listpage的组件 里面放了一个a链接注册组件配置打包 "package": "vue-cli-service build --target lib ./src/package/index.js --name managerpage -…...
有限与无限游戏 | 真北荐书
2023佛山敏捷之旅暨DevOps Meetup志愿者为进行大会的组织与准备,每周三晚有一个例会。 例会前等人的时间,涌现出一个小的分享环节。今天分享这本书:《有限与无限游戏》。 大家选择成为志愿者,是一个无限游戏。而组织活动和完成各种…...
网络安全(黑客)自学剖析
想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…...
Leetcode每日一题:1267. 统计参与通信的服务器
原题 这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。 如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其…...
HarmonyOS开发:超详细了解项目的工程结构
前言 系列文章目录: HarmonyOS开发第一步,熟知开发工具DevEco Studio 当我们熟练的掌握了DevEco Studio之后,就可以创建项目进行练习了,和市场上大多数IDE一样,DevEco Studio也给我们提供了很多的实例模板,…...
HTML基础知识点
目录 编辑一、使用 vscode 二、研究代码的特点 三、HTML 常见标签 注释标签 标题标签 段落标签 换行标签 格式化标签 图片标签 超链接标签 表格标签 列表标签 表单标签: form 标签 input标签: select textarea标签: 无语…...
3个步骤掌握Markmap:将Markdown转换为交互式思维导图完全指南
3个步骤掌握Markmap:将Markdown转换为交互式思维导图完全指南 【免费下载链接】markmap Build mindmaps with plain text 项目地址: https://gitcode.com/gh_mirrors/ma/markmap Markmap作为一款强大的开源工具,能够将普通的Markdown文本转换为直…...
OSI七层模型的意义:网络世界的工程思维密码
理解七层网络模型(OSI模型)的意义,不在于死记硬背哪一层叫什么名字,而在于它能帮你建立一套拆解复杂系统的思维框架。具体来说,学习它主要有以下几层价值:1. 建立“分而治之”的工程思维网络通信是一个极其…...
临床数据建模实战:Lasso回归在蛋白质组学中的5个关键应用技巧
临床数据建模实战:Lasso回归在蛋白质组学中的5个关键应用技巧 蛋白质组学数据的高维度特性让传统统计方法束手无策——当检测指标数量达到数千甚至上万时,如何从海量蛋白质中识别出真正有临床意义的生物标志物?这正是Lasso回归大显身手的领域…...
从大疆NAZA换到匿名P2飞控:一个DIY玩家的真实体验与参数调试避坑指南
从大疆NAZA到匿名P2飞控:一位DIY玩家的深度迁移指南 当我的F450机架在狭小卧室里显得笨拙不堪时,我意识到需要一次彻底的"瘦身计划"。这不是简单的机架更换,而是一次从商业飞控到开源系统的完整迁移——将大疆NAZA积累的经验移植到…...
深入解析AUTOSAR通信模块:从信号抽象到多路CAN配置
1. AUTOSAR通信模块的核心价值 第一次接触AUTOSAR通信模块时,我被它复杂的层级关系绕得头晕。直到在实车上调试快充CAN信号时,才真正理解这种架构设计的精妙之处。简单来说,AUTOSAR的Com模块就像个智能邮局,负责把应用层产生的各种…...
不止于搭建:在Kali上配置DVWA靶场后,你的第一个安全测试实战指南
不止于搭建:在Kali上配置DVWA靶场后,你的第一个安全测试实战指南 当你第一次看到DVWA的登录界面时,那种既兴奋又迷茫的感觉我太熟悉了。就像拿到了一套精密的医疗器械,却不知道从哪个部位开始检查。别担心,这篇文章将…...
如何通过InstantClick事件回调实现精准的性能监控:开发者必备指南
如何通过InstantClick事件回调实现精准的性能监控:开发者必备指南 【免费下载链接】instantclick InstantClick makes following links in your website instant. 项目地址: https://gitcode.com/gh_mirrors/in/instantclick InstantClick是一款能让网站链接…...
2026学生免费用AI编程神器全攻略——白嫖不要白不要,大学生快来
好的,上一章刚教你用GitHub武装自己,筑起技术护城河,但光会搬砖(敲命令)还不够,你得学会“开高达”——用AI编程助手把效率拉满。 2026年了,如果还纯靠手打for循环和查API文档,那你…...
阿里千问,有个海外版
阿里千问,有个海外版。我也是最近才知道,用了一下,发现审核尺度明显要宽松很多,国内的千问明显被约束很多,就是个半残品。据说啊,国际版千问的部分数据放在了新加坡,对标的是ChatGPT。好像现在阿…...
为什么头部AI工厂已全面切换PyTorch 3.0静态图训练?揭秘2024年Q2实测吞吐提升3.8倍、成本下降41%的关键配置
第一章:PyTorch 3.0静态图训练的企业级演进全景PyTorch 3.0标志着深度学习框架从动态优先范式向动静统一架构的关键跃迁。其核心突破在于TorchDynamo Inductor后端的深度融合,使torch.compile()不再仅是实验性优化器,而成为企业级生产训练流…...
