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

 

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

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

相关文章

数组分割(2023省蓝桥杯)n种讨论 JAVA

目录 1、题目描述:2、前言:3、动态规划(bug):3、递归 剪枝(超时):4、数学(正解): 1、题目描述: 小蓝有一个长度为 N 的数组 A [A0, A1,…, AN−…

【⑭MySQL | 数据类型(二)】字符串 | 二进制类型

前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL字符串 | 二进制类型类型的分享✨ 目录 前言5 字符串类型6 二进制类型总结 5 字符串类型 字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比…

.net6.0引用的dll放置单独的文件夹

.net6.0 采用原有的设置方法不起作用 <?xml version"1.0" encoding"utf-8" ?> <configuration><startup> <supportedRuntime version"v4.0" sku".NETFramework,Versionv4.8" /></startup><runtim…

PDF如何转ppt?PDF转ppt的方法

PDF是一种广泛应用于文档传输和存储的格式&#xff0c;然而&#xff0c;在某些情况下&#xff0c;我们可能需要将PDF文件转换为PPT&#xff0c;以便更加灵活地编辑和展示内容。那么&#xff0c;PDF如何转ppt呢?在本文中&#xff0c;我们将介绍几种常用的方法和工具&#xff0c…

总结:Git 撤销操作

1、还未添加到暂存区&#xff1a;git checkout -- filename 执行命令后&#xff0c;会回退到未修改之前的状态 2、已经添加到暂存区&#xff1a;git reset HEAD filename 执行命令后&#xff0c;会回退到工作区之前的状态 3、已经 commit&#xff0c;但是还未 push git reset…

ImageReader保存图片转 opencvmat

目录 ImageReader 直接保存图片&#xff0c;没成功&#xff0c;格式是yuv420&#xff0c;需要转换 转opencv nv21保存图片&#xff0c;测试ok rgb888 data保存图片&#xff1a; ImageReader 直接保存图片&#xff0c;没成功&#xff0c;格式是yuv420&#xff0c;需要转换 …

VLOOKUP

VLOOKUP简单应用 VLOOKUP(A1,B:B,1,FALSE) 是查询A1这子格子的数据在B这一列里面有没有找到相同数据的值,如果有的话就放在当前格子里面去 如果没有的话就是#NA VLOOKUP(A1,F:G,2,FALSE) 是查询A1这子格子的数据在F列查相同的数据,然后再取G列这一行后面的这个格子的数据放到…

Python学习笔记_进阶篇(三)_django知识(二)

本章内容 Django model Model 基础配置 django默认支持sqlite&#xff0c;mysql, oracle,postgresql数据库。 <1> sqlite django默认使用sqlite的数据库&#xff0c;默认自带sqlite的数据库驱动 引擎名称&#xff1a;django.db.backends.sqlite3 <2>mysql …

【算法刷题之哈希表(2)】

目录 1.leetcode-454. 四数相加 II2.leetcode-383. 赎金信&#xff08;1&#xff09;暴力解法&#xff08;2&#xff09;哈希法 3.leetcode-205. 同构字符串&#xff08;1&#xff09;哈希法&#xff08;2&#xff09;直接对比查找 4.leetcode-128. 最长连续序列5.总结 1.leetc…

solidity0.8.0的应用案例14:空投合约

空投是币圈中一种营销策略,项目方将代币免费发放给特定用户群体。为了拿到空投资格,用户通常需要完成一些简单的任务,如测试产品、分享新闻、介绍朋友等。项目方通过空投可以获得种子用户,而用户可以获得一笔财富,两全其美。 因为每次接收空投的用户很多,项目方不可能一…

mysql-sql性能分析工具

一、sql执行频率 MySQL 客户端连接成功后&#xff0c;通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令&#xff0c;可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次&#xff1a; -- session 是查看当前会话 ; -- global 是查询全…

启动docker容器的几种方法和注意事项(docker-compose,dockerfile)

1&#xff1a;要启动容器必须都先创建好镜像文件 C:\Users\dell>docker images REPOSITORY TAG IMAGE ID CREATED SIZE poi 1.0 22738bb31074 4 hours ago 105MB redis latest 506734eb5e71 6 days ago 138MB ng…

【硕士论文完美复现】【价格型需求响应】基于需求侧响应的配电网供电能力综合评估(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

七大排序算法详解

1.概念 1.排序的稳定性 常见的稳定的排序有三种&#xff1a;直接插入排序&#xff0c;冒泡排序&#xff0c;归并排序 对于一组数据元素排列&#xff0c;使用某种排序算法对它进行排序&#xff0c;若相同数据之间的前后位置排序后和未排序之前是相同的&#xff0c;我们就成这种…

机器学习之ResNet(残差网络)与常用的标准数据集

ResNet&#xff08;Residual Network&#xff09;是一种深度神经网络&#xff0c;由微软实验室的何凯明等几位大神在2015年提出&#xff0c;并在当年的ImageNet竞赛中获得了分类任务第一名。 ResNet通过引入残差结构&#xff08;residual structure&#xff09;&#xff0c;解决…

vue3 vite使用 monaco-editor 报错

报错&#xff1a;Unexpected usage at EditorSimpleWorker.loadForeignModule 修改配置&#xff1a; "monaco-editor-webpack-plugin": "^4.2.0",删除不用 版本&#xff1a; "monaco-editor": "^0.28.1", 修改如下&#xff1a; opti…

《基于 Vue 组件库 的 Webpack5 配置》2.模块规则 module.rule

配置 module.rules &#xff0c;创建模块时&#xff0c;匹配请求的规则数组&#xff1b; 可参考 webpack5 指南-管理资源&#xff1b; vue 可参考上述配置&#xff1b; js 使用 webpack babel-loader&#xff1b; css 参考 webpack 加载 CSS。注意style-loader 和 vue-style…

stm32 无刷电机 V/F控制(无刷电机变频控制)以及与foc(矢量控制)的区别

无刷电机有三种控制方式&#xff0c;方波控制&#xff0c;foc控制以及变频控制&#xff0c;前两章我们讲解了方波和foc的控制方法&#xff0c;今天我们一起来讲一讲什么是无刷电机的变频控制&#xff08;VF&#xff09;以及变频控制的优势是什么。 实验用的硬件还是KY_Motor的无…

IDEA远程开发

IDEA远程开发 前期准备 IDEA的远程开发是在本地去操昨远程服务器上的代码&#xff0c;所以我们先需要准备一台服务器,在此我使用vmware虚拟出ubuntu-20.04.6的Server版本,以便后面演示。 Ubuntu的Java环境配置 JDK8 sudo apt install openjdk-8-jdkmaven sudo apt instal…